如何在Spring RestController中对Json属性进行排序

时间:2017-09-25 09:21:01

标签: java json sorting properties spring-restcontroller

我有一个巨大的Map<String, Object>,它是Spring RestController动作的返回类型。 映射基本上是String - String对,带有String - Map,称为context。 我想将输出json排序到第一个上下文。 当返回的对象具有属性时,我发现@JsonPropertyOrder是一个解决方案。不幸的是,它不适用于我的地图。

@RestController
public class MyController {

    @RequestMapping("/test.json")
    @JsonPropertyOrder(value = {"context"}, alphabetic = true)
    public Map<String, Object> response() {
        Map<String, String> context = new HashMap<>();
        context.put("environment", "dev");
        Map<String, Object> myMap = new HashMap<>();
        myMap.put("context", context);
        myMap.putAll(fillMyMap());
        return myMap;
    }

    private Map<String, String> fillMyMap() {
        Map<String, String> myMapFillValues = new HashMap<>();
        myMapFillValues.put("test", "foo");
        myMapFillValues.put("test2", "bar");
        return myMapFillValues;
    }
}

所以我想要像这样的输出

{
    "context": {
        "environment": "dev"
    },
    "test": "foo",
    "test2": "bar"
}

而不是:

{
    "test": "foo",
    "test2": "bar",
    "context": {
        "environment": "dev"
    }
}

3 个答案:

答案 0 :(得分:0)

指定父级的顺序。

@JsonPropertyOrder({“context”,“test”,“test2”})

公共课Foo {

字母相同 https://fasterxml.github.io/jackson-annotations/javadoc/2.3.0/com/fasterxml/jackson/annotation/JsonPropertyOrder.html

@JsonPropertyOrder(字母=真)

公共课Foo {

答案 1 :(得分:0)

对于Spring Boot,添加

spring.jackson.serialization.order-map-entries-by-keys=true

application.properties文件。

答案 2 :(得分:0)

LinkedHashMap将以相同的顺序输出到json。 您将顺序{{1“,” 3“,” 2“}-> Json依次放入{” 1“,” 3“,” 2“}。无论是ASC还是DESC

所以

Map<String, String> myMapFillValues = new LinkedHashMap<>();

代替

Map<String, String> myMapFillValues = new HashMap<>();