Java 如何在SpringRestController中对Json属性进行排序
我有一个巨大的Java 如何在SpringRestController中对Json属性进行排序,java,json,sorting,properties,spring-restcontroller,Java,Json,Sorting,Properties,Spring Restcontroller,我有一个巨大的映射,它是SpringRestController操作的返回类型。 这个映射基本上是字符串对,带有一个名为context的字符串映射。 我想首先将输出json排序到上下文。 当返回的对象具有属性时,我发现@JsonPropertyOrder是一个解决方案。不幸的是,它不适用于我的地图 @RestController public class MyController { @RequestMapping("/test.json") @JsonPropertyOrde
映射
,它是SpringRestController操作的返回类型。
这个映射基本上是字符串对,带有一个名为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;
}
}
与此相反:
{
"test": "foo",
"test2": "bar",
"context": {
"environment": "dev"
}
}
指定父级上的顺序 @JsonPropertyOrder({“上下文”、“测试”、“测试2”}) 公开课Foo{ 字母顺序也是一样 @JsonPropertyOrder(字母=true)
公共类Foo{指定父级上的顺序 @JsonPropertyOrder({“上下文”、“测试”、“测试2”}) 公开课Foo{ 字母顺序也是一样 @JsonPropertyOrder(字母=true) 对于Spring Boot的公共类Foo{,添加
spring.jackson.serialization.order-map-entries-by-keys=true
到application.properties
文件。对于Spring Boot,添加
spring.jackson.serialization.order-map-entries-by-keys=true
到
application.properties
文件。LinkedHashMap
将以相同的顺序输出到json。
您将{“1”、“3”、“2”}->Json get的顺序设置为{“1”、“3”、“2”}。ASC和DESC都不是
所以
Map myMapFillValues=newlinkedhashmap();
而不是
Map<String, String> myMapFillValues = new HashMap<>();
Map myMapFillValues=newhashmap();
LinkedHashMap
将以相同的顺序输出到json。
您将{“1”、“3”、“2”}->Json get的顺序设置为{“1”、“3”、“2”}。ASC和DESC都不是
所以
Map myMapFillValues=newlinkedhashmap();
而不是
Map<String, String> myMapFillValues = new HashMap<>();
Map myMapFillValues=newhashmap();
您无法使用HashMap执行此操作,因为它不维护顺序。如果您关心顺序,您可以尝试LinkedHashMap或其他维护顺序的映射。检查LinkedHashMap是否工作。该注释不就是说对上下文中的项目按字母顺序排列吗?@mlecz-Thx,它解决了我的问题。您不能像使用HashMap那样执行此操作es不维护顺序。如果您关心顺序,您可以尝试LinkedHashMap,或其他维护顺序的映射。检查LinkedHashMap是否工作。该注释不就是说对上下文中的项目按字母顺序排列吗?@mlecz-Thx,它解决了我的问题。正如我所说,我没有任何具有属性的自定义对象。我有一个映射,因此无法在父对象上指定JsonPropertyOrder。顺便说一句:我的映射中有大约4-500个字符串-字符串对。因此我不想创建具有属性的自定义对象。;(如我所说,我没有任何具有属性的自定义对象。我有一个映射,因此无法在父对象上指定JsonPropertyOrder。顺便说一句:我的映射中有大约4-500个字符串-字符串对所以我并不想创建一个具有属性的自定义对象