Java 将类成员序列化为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

我正在研究如何将POJO序列化为json字符串。我正在使用杰克逊图书馆,遇到了一个问题

json对象中的值可以是字符串或字符串数组,如

{"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.
    }
}