当用户单击网页上的列标题时,我尝试在 Spring MVC 应用程序中支持不区分大小写的排序。当页面呈现时,Thymeleaf 扩展会创建一个 anchor 和 href
是当前 URL,带有 Pageable
支持的一些参数:即 page, size and sort
.
sort=propertyName,ASC
格式工作正常,但我无法从 URL 中找到如何表示排序应该不区分大小写。我可以很容易地用代码来完成它,但标准的 Pageable 支持似乎不支持它。
经过一些调试,标准框架 org.springframework.data.web.SortHandlerMethodArgumentResolver
似乎是这样的。只是不支持org.springframework.data.domain.Sort.Order.ignoreCase
.
我对此有些困惑,想知道是否有充分的理由?
我可以考虑创建自己的 SortHandlerMethodArgumentResolver
类,并使其解析 ASCI|DESCI
(表示不区分大小写)和 ASCS|DESCS
(表示区分大小写)并生成适当的 Sort
对象,但这给我留下了相当大的工作量和严重的“代码味道”。
我不是第一个偶然发现这个问题的人。有人有什么建议吗?
最佳答案
我认为唯一的选择是实现自定义的 SortHandlerMethodArgumentResolver。该文档对此有简要指南 http://docs.spring.io/spring-data/data-commons/docs/1.6.1.RELEASE/reference/html/repositories.html
To customize this behavior extend either SpringDataWebConfiguration or the HATEOAS-enabled equivalent and override the pageableResolver() or sortResolver() methods and import your customized configuration file instead of using the @Enable-annotation.
对于格式,我将其设为由 3 个元素组成的逗号分隔字符串:字段名称、方向、ignoreCase 标志。像这样的事情:
sort=name,ASC,ignore
最后一个元素是可选的,因此可以:
sort=name,ASC
这意味着ignoreCase为假。
还应该可以仅指定字段名称,例如:
sort=name
这意味着 ASC 和ignoreCase 的默认方向为 false。
唯一的问题是,如果你想传递ignoreCase标志,你必须传递方向,我认为这不应该是一个大问题。
希望这有帮助!
顺便说一句,这里有一个用于此改进的 JIRA 项目 https://jira.spring.io/browse/DATACMNS-658 (扩展SortHandlerMethodArgument解析器以能够检测忽略大小写的请求)
关于 Spring MVC : how to get case-insensitive ordering from Pageable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30059312/