我有一个巨大的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"
}
}
答案 0 :(得分:0)
指定父级的顺序。
@JsonPropertyOrder({“context”,“test”,“test2”})
公共课Foo {
@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<>();