gpt4 book ai didi

java - 将类成员序列化为 JSON 对象

转载 作者:行者123 更新时间:2023-12-01 15:14:14 25 4
gpt4 key购买 nike

我正在研究如何将 POJO 序列化为 json 字符串。我正在使用 Jackson 库,但遇到了问题。

json 对象中的值可以是字符串或字符串数​​组,如下所示...

{"mimeTypes":"all"}

 {"mimeTypes":["application/pdf", "application/msword"]}

这是我目前的做法

@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 View 的内容,但我不确定这是否可以解决我的问题。

最佳答案

我还没有测试过它,但我会尝试添加一个专用方法来计算应该序列化的内容:

class MyMimeTypes {
@JsonIgnore
private String[] mimeTypesArray;

/** A convenience method for setting just one item. */
public void setMimeType(String mimeType) {
this.mimeTypesArray = new String[] { mimeType };
}

public void setMimeTypes(String[] mimeTypes) {
this.mimeTypesArray = mimeTypes;
}

// The JSON-specific part:

@JsonProperty("mimeTypes")
public Object jsonMimeTypes() {
if (mimeTypesArray.length == 1)
return mimeTypesArray[0];
else
return mimeTypesArray;
}
}

这样,如果数组中只有一项,则序列化值将只是该项。否则整个数组将被序列化。

请注意,使用两个具有相同名称和不同签名的 setter 是一种不好的做法。据我所知,这违反了 Java Beans 规范。

也许您可以在此处使用 vararg 方法来替换两个 setter(但我不知道这如何与 Java Beans 规范结​​合在一起):

public void setMimeTypes(String... mimeTypes) {
this.mimeTypesArray = mimeTypes;
}

关于java - 将类成员序列化为 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11865533/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com