Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.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 如何在SpringRestController中对Json属性进行排序_Java_Json_Sorting_Properties_Spring Restcontroller - Fatal编程技术网

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个字符串-字符串对所以我并不想创建一个具有属性的自定义对象