一尘不染

如何在Spring Boot 1.4中对来自HTTP请求的排序参数设置IgnoreCase

spring-boot

我有一个运行并接受HTTP请求的Spring Boot后端。

示例:http//www.myserver.com/devices/

我正在使用Pageable来处理请求以及自动分页和排序,因此我可以使用以下请求:http
://www.myserver.com/devices?sort=name,desc

但是,存在一个问题,即如果区分大小写,则无法获得所需的排序结果(不区分大小写的排序)。

我知道Pageable Sort接受了sort属性的两个参数,即sort =
name,desc,但是当检查调试器时,我可以看到pageable的排序顺序对象包含一个ignoreCase属性。

这是通过REST调用的方法的代码片段:

public class DeviceController {

    @Autowired
    DeviceViewRepository deviceViewRepository;

    @RequestMapping(method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
    public Page<DeviceView> getAllDevices(@PageableDefault(page = 0, size = 10, sort= "id") Pageable pageable) {
        try {
            return deviceViewRepository.findAll(pageable);
        } catch (Exception e){
            throw e;
        }
    }
}

有什么方法可以通过请求url,PageableDefault或其他任何方法来自动/手动进行设置?

请记住,排序参数是动态的,有问题的方法使用的是Spring Data Repository的findAll()方法。

更新:

这本质上就是我的目标。我无法在此发表评论,以询问它的完成方式或提示,因此,如果有人知道如何实现该解决方案,我将非常感谢朝着正确方向的推动。


阅读 372

收藏
2020-05-30

共1个答案

一尘不染

答案是(可悲的),您必须自己使用解析器解决问题-至少要等到https://jira.spring.io/browse/DATACMNS-658被解析为止

ArgumentResolver调用自己的名称,解析URL并更新Sort对象是相对简单的。我面临的挑战是确保分页控件始终使用正确的URL,而且我不得不做很多我认为不应该做的URL操作-
尽管我是Spring的新手,所以我可能做得不太好。

我很高兴为您提供实施方法,让您有所作为,但是我没有什么可以上传可以在任何时间停留的文件。我不希望在此处放置一个链接(例如,指向保管箱),而当有人再次阅读此帖子时,该链接将在12个月后消失。

很高兴由PM提供,并让其他人将其公开发布(如果他们有能力)。

2020-05-30