Java 将类成员序列化为JSON对象
我正在研究如何将POJO序列化为json字符串。我正在使用杰克逊图书馆,遇到了一个问题 json对象中的值可以是字符串或字符串数组,如Java 将类成员序列化为JSON对象,java,android,jackson,Java,Android,Jackson,我正在研究如何将POJO序列化为json字符串。我正在使用杰克逊图书馆,遇到了一个问题 json对象中的值可以是字符串或字符串数组,如 {"mimeTypes":"all"} 或 这是我目前的做法 @JsonIgnore private String mimeTypes; @JsonIgnore private String[] mimeTypesArray; @JsonRawValue @JsonProperty("integration/enabled-mime-types") priva
{"mimeTypes":"all"}
或
这是我目前的做法
@JsonIgnore
private String mimeTypes;
@JsonIgnore
private String[] mimeTypesArray;
@JsonRawValue
@JsonProperty("integration/enabled-mime-types")
private String mimeType;
public void setMimeTypes(String mimeTypes) {
this.mimeTypes = mimeTypes;
mimeType = mimeTypes;
}
public void setMimeTypes(String[] mimeTypes) {
this.mimeTypesArray = mimeTypes;
try {
JSONArray jsonArray = new JSONArray(mimeTypes);
this.mimeType = jsonArray.toString();
} catch (JSONException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
}
基本上,我有一个字符串字段、一个字符串数组字段和一个要添加到json对象的字符串字段。我在setter上序列化,这样对象映射器就不必选择要使用的字段
这感觉像是一种令人讨厌的做事方式。有更好的解决办法吗?我一直在阅读有关使用jackson视图的内容,但我不确定这是否可能解决我的问题。
我还没有测试它,但我会尝试添加一个专用方法来计算应该序列化的内容:
类MyMimeTypes{
@杰索尼奥雷
私有字符串[]mimeTypesArray;
/**仅设置一个项目的方便方法*/
public void setMimeType(字符串mimeType){
this.mimeTypesArray=新字符串[]{mimeType};
}
public void setMimeTypes(字符串[]mimeTypes){
this.mimeTypesArray=mimeTypes;
}
//JSON特定部分:
@JsonProperty(“mimeTypes”)
公共对象jsonMimeTypes(){
if(mimeTypesArray.length==1)
返回mimeTypesArray[0];
其他的
返回mimeTypesArray;
}
}
这样,如果数组中只有一个项,则序列化的值就是该项。否则整个数组将被序列化
请注意,让两个二传手拥有相同的名字和不同的签名是一种糟糕的做法。违反JavaBeans规范的AFAIK
也许您可以在这里使用vararg方法来替换这两个setter(但我不知道这与JavaBeans规范是如何配合的):
public void setMimeTypes(字符串…mimeTypes){
this.mimeTypesArray=mimeTypes;
}
我刚刚意识到varargs不能用于反序列化
@JsonIgnore
private String mimeTypes;
@JsonIgnore
private String[] mimeTypesArray;
@JsonRawValue
@JsonProperty("integration/enabled-mime-types")
private String mimeType;
public void setMimeTypes(String mimeTypes) {
this.mimeTypes = mimeTypes;
mimeType = mimeTypes;
}
public void setMimeTypes(String[] mimeTypes) {
this.mimeTypesArray = mimeTypes;
try {
JSONArray jsonArray = new JSONArray(mimeTypes);
this.mimeType = jsonArray.toString();
} catch (JSONException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
}