jackson仅使用字段名称对响应进行排序

时间:2015-12-28 04:43:47

标签: java json xml spring jackson

我有几个pojo课程。 使用Jackson @JsonUnwrapped注释来省略类名,但属性没有按照我的预期排序。

例如:

class a {
    @JsonUnwrapped
    B b;
    int c;
    //getters and setters
}

class B {
    int a;
    int d;
    // getters and setters
}

我的实际回应是:

{
c:1
a:2
d:2
}

但我的预期回应是:

{
a:2
c:1
d:2
}

如何使响应中的字段按名称排序?

1 个答案:

答案 0 :(得分:1)

这有点棘手,因为杰克逊将未包装对象的所有属性的序列化组合在一起。 @JsonPropertyOrder注释无法覆盖此行为,因为它works on the unwrapped field而不是字段的属性。作为一种变通方法,您可以将对象序列化为中间Map,自行排序,然后按如下方式将其序列化为JSON:

ObjectMapper objectMapper = new ObjectMapper();
Map map = objectMapper.convertValue(new a(), Map.class);
SortedMap sortedMap = new TreeMap(map);
System.out.println(objectMapper.writeValueAsString(sortedMap));