Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java jackson仅使用字段名对响应进行排序_Java_Json_Xml_Spring_Jackson - Fatal编程技术网

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

Java jackson仅使用字段名对响应进行排序,java,json,xml,spring,jackson,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 } 但我预

我有几个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
}
但我预期的反应是:

{
c:1
a:2
d:2
}
{
a:2
c:1
d:2
}

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

这有点棘手,因为Jackson将展开对象的所有属性的序列化组合在一起。
@JsonPropertyOrder
注释无法重写此行为,因为它不是字段的属性,而是属性。作为一种解决方法,您可以将对象序列化为中间的
映射
,自己对其进行排序,然后将其序列化为JSON,如下所示:

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

我正在使用SpringJava项目,请告诉我如何使用Jackson2ObjectMapperBuilder配置它,我不知道有什么干净的方法可以做到这一点。