- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在研究如何将 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/
出于好奇,我尝试了一些原型(prototype)制作,但似乎只允许在第一个位置使用子例程的原型(prototype) &。 当我写作时 sub test (&$$) { do_somethin
我需要开发一个类似于 Android Play 商店应用程序或类似 this app 的应用程序.我阅读了很多教程,发现几乎每个教程都有与 this one 类似的例子。 . 我已经开始使用我的应用程
考虑一个表示“事件之间的时间”的列: (5, 40, 3, 6, 0, 9, 0, 4, 5, 18, 2, 4, 3, 2) 我想将这些分组到 30 个桶中,但桶会重置。期望的结果: (0, 1,
我是一名优秀的程序员,十分优秀!