此问题出现在 Spring-Data 版本 2 中。在最新版本 1.13.9(及更早版本)中,它运行良好。
控制器代码:
@RestController
public class HelloController {
@RequestMapping("/")
public String index() {
return "Greetings from Spring Boot!";
}
@RequestMapping(value = "sorttest", method = RequestMethod.GET)
public Page<Integer> getDummy() {
return new PageImpl<>(Collections.singletonList(1), new PageRequest(0, 5, new Sort("asdf")), 1);
}
}
Spring-Data 2 风格相同:
Pageable pageable = PageRequest.of(0, 10, new Sort(Sort.Direction.ASC, "asd"));
PageImpl<Integer> page = new PageImpl<Integer>(Lists.newArrayList(1,2,3), pageable, 3);
return page;
配置:
@SpringBootApplication
@EnableWebMvc
@EnableSpringDataWebSupport
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
还尝试了简单的 Spring 应用程序,没有 Spring Boot 和 Java 配置以及 XML 配置。结果是一样的:
{
"content": [
1
],
"pageable": {
"sort": {
"sorted": true,
"unsorted": false
},
"offset": 0,
"pageSize": 5,
"pageNumber": 0,
"paged": true,
"unpaged": false
},
"totalElements": 1,
"last": true,
"totalPages": 1,
"size": 5,
"number": 0,
"sort": {
"sorted": true,
"unsorted": false
},
"numberOfElements": 1,
"first": true
}
如果我将 Spring-Data 版本更改为 1.X,我将得到正确的 JSON 响应来排序对象:
{
"content": [
1
],
"totalElements": 1,
"totalPages": 1,
"last": true,
"size": 5,
"number": 0,
"sort": [
{
"direction": "ASC",
"property": "asdf",
"ignoreCase": false,
"nullHandling": "NATIVE",
"ascending": true,
"descending": false
}
],
"numberOfElements": 1,
"first": true
}
似乎我什么都试过了,我没有在更新日志中找到任何关于排序更改的通知,我在 Spring JIRA 中没有发现这样的问题。
所以问题是我如何使用 spring-data 2.X libs JSON 排序如下:
"sort": [
{
"direction": "ASC",
"property": "asdf",
"ignoreCase": false,
"nullHandling": "NATIVE",
"ascending": true,
"descending": false
}
]
代替:
"sort": {
"sorted": true,
"unsorted": false
}