Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.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 春季MVC杰克逊与订单_Java_Json_Spring Mvc_Jackson - Fatal编程技术网

Java 春季MVC杰克逊与订单

Java 春季MVC杰克逊与订单,java,json,spring-mvc,jackson,Java,Json,Spring Mvc,Jackson,我需要从ajax调用返回一个有序字符串列表 我的DTO有一个属性大小,它是一个字符串值列表,例如:36,38,40/46,46,S,XS,M,L 我的比较器和排序算法工作得很好,大小列表被很好地排序,直到它转换成json格式,我发现一个完全不同的顺序 @ResponseBody @RequestMapping(value = PRODUCT_CODE_PATH_VARIABLE_PATTERN + "/crossell", method = RequestMethod.GET) public P

我需要从ajax调用返回一个有序字符串列表

我的DTO有一个属性大小,它是一个字符串值列表,例如:36,38,40/46,46,S,XS,M,L

我的比较器和排序算法工作得很好,大小列表被很好地排序,直到它转换成json格式,我发现一个完全不同的顺序

@ResponseBody
@RequestMapping(value = PRODUCT_CODE_PATH_VARIABLE_PATTERN + "/crossell", method = RequestMethod.GET)
public ProductData cosselProductDetail(@PathVariable("productCode") final String productCode,
        final HttpServletResponse response) throws CMSItemNotFoundException,
        UnsupportedEncodingException
{

   Collections.sort(sortedSizes,mycomparator);
    productData.setSizes(sortedSizes);
    return productData;   
}
spring配置是默认配置,没有添加或修改任何内容

<!-- activates annotation driven binding -->
<mvc:annotation-driven ignoreDefaultModelOnRedirect="true" validator="validator">
    <mvc:message-converters>
        <bean class="org.springframework.http.converter.ResourceHttpMessageConverter"/>
        <bean class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter"/>
        <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" />
    </mvc:message-converters>
</mvc:annotation-driven>

在四处搜索之后,我找到的是序列化键config:SORT\u PROPERTIES\u,它按字母顺序排列属性,而不是值


谢谢

这不是答案,但我这样发帖是因为它更容易格式化。不管是LinkedHashMap,我仍然相信序列化将保持秩序。我很好奇,所以我打了一些类似的例子,比如:

@ResponseBody
@RequestMapping(value = "/crossel", method = RequestMethod.GET)
public ProductData cosselProductDetail() {

    List<String> sortedSizes = new LinkedList<>();
    sortedSizes.add("11");
    sortedSizes.add("8");
    sortedSizes.add("10");
    sortedSizes.add("15");
    sortedSizes.add("20");
    sortedSizes.add("5");
    sortedSizes.add("3");
    sortedSizes.add("7");
    sortedSizes.add("40");
    Map<String, String> linkedHS = new LinkedHashMap<>();
    Collections.sort(sortedSizes, new ValueComparator(linkedHS));
    for (String key : sortedSizes) {
        linkedHS.put(key, "test");
    }
    ProductData productData = new ProductData();
    productData.setSizes(linkedHS);
    return productData;
}

class SizeComparator implements Comparator<String> {

    @Override
    public int compare(String e1, String e2) {
        if (e1.length() == 1) e1 = "0" + e1;
        if (e2.length() == 1) e2 = "0" + e2;
        return e1.compareTo(e2);
    }
}


class ProductData {
    Map<String, String> sizes;

    public Map<String, String> getSizes() {
        return sizes;
    }

    public void setSizes(Map<String, String> sizes) {
        this.sizes = sizes;
    }
}

请记住,键是自定义排序的。因此,在SpringMVC3.2+中,或多或少带有默认配置,我希望保留顺序。发布您的代码,不必担心问题过于复杂,应该是可修复的

什么是
productData.sizes
?一个简单的列表有一个强有力的论据,如果顺序很重要,那么它不是真正的JSON,这里讨论得很好,很遗憾,我希望默认配置在转换后保留顺序。请原谅我的提问,但你确定这就是你失去排序的原因吗。另外,你能检查(在调试器中)并粘贴sizes列表的具体实现吗更具体地说,sizes是linkedHashMap(OffeProption extends ProductDTO)我丢失了键的顺序我恐怕我错过了解释问题时我说的只是一个列表,这有什么区别吗?谢谢
{"sizes":{"3":"test","5":"test","7":"test","8":"test","10":"test","11":"test","15":"test","20":"test","40":"test"}}