提问人:Alviere 提问时间:10/17/2015 更新时间:9/10/2023 访问量:22467
杰克逊@JsonPropertyOrder被忽略
Jackson @JsonPropertyOrder is ignored
问:
我目前正在使用 Spark 框架开发 RESTful 应用程序,并使用 Jackson 进行序列化。我遇到了这样的问题:@JsonPropertyOrder被忽略了。
这是我的 POJO:
@Data
@JsonPropertyOrder({"id", "company", "title", "infos", "startDate", "endDate"})
public class Info {
@JsonProperty("id")
long id;
@JsonProperty("company")
Company company;
@JsonProperty("title")
String title;
@JsonProperty("infos")
List<Prize> infos;
@JsonProperty("startDate")
Date startDate;
@JsonProperty("endDate")
Date endDate;
public Info() {}
}
我用这种方法生成JSON:
public static String generateJSONResponse(Object response) {
if (responseObjectMapper == null) {
responseObjectMapper = new ObjectMapper(new JsonFactory());
responseObjectMapper.enable(SerializationFeature.INDENT_OUTPUT);
}
try {
return responseObjectMapper.writeValueAsString(response);
} catch (IOException ioe) {
// Must not occur
}
// Something really unexpected happened, so we return unknown response;
return ErrorMessages.ERROR_RESPONSE_UNKNOWN;
}
最后我收到这个:
{
"status": 0,
"result": {
"infoList": [
{
"infos": [...],
"id": 2,
"title": "...",
"company": {...},
"startDate": 1445238000000,
"endDate": 1445792400000
},
...
]
}
}
我做错了什么?还是杰克逊出了什么问题?谁能帮我解决这个问题?
此外,我使用 Jackson 版本 2.6.3 和 2.3.5 尝试了此操作。两者的工作方式相同。
答:
0赞
Ashwin Jayaprakash
9/22/2016
#1
注解 JavaDoc 也呼应了“无序”集合:https://www.javadoc.io/doc/com.fasterxml.jackson.core/jackson-annotations/latest/com/fasterxml/jackson/annotation/JsonPropertyOrder.html
此注解可能对反序列化有影响,也可能没有影响:对于 基本的JSON处理没有效果,但对于其他支持的数据 类型(或结构约定)可能存在。
这可能解释了为什么它不起作用。
-4赞
Nitin Jain
5/2/2018
#2
Lomboks @Data干扰了 Jackson 反序列化。删除它并尝试..
0赞
Hoiama Rodrigues
7/7/2021
#3
检查是否导入了正确的“JsonPropertyOrder”包:
这对我有用:import com.fasterxml.jackson.annotation.JsonPropertyOrder;
评论
@Data
An object is an unordered collection of zero or more name/value pairs, [...]
Implementations whose behavior does not depend onmember ordering will be interoperable in the sense that they will not be affected by these differences.
"@Data
annotation 是一个 Lombok 库注解,它使我不必为每个字段编写 getter 和 setter。我不知道它是否以某种方式干扰了,但我会对此进行调查。@Data
@JsonPropertyOrder