当用户点击我网页上的列标题时,我试图在我的Spring MVC应用程序中支持不区分大小写的排序。呈现页面时,Thymeleaf扩展会创建一个锚点,href
是当前网址,其中包含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
对象,但这让我感到非常困难,并且有一种严肃的代码味道"。
我无法成为第一个偶然发现这一点的人。有没有人有任何建议?
答案 0 :(得分:3)
我认为唯一的选择是实现自定义SortHandlerMethodArgumentResolver。该文档包含此http://docs.spring.io/spring-data/data-commons/docs/1.6.1.RELEASE/reference/html/repositories.html
的简要指南要自定义此行为,请扩展SpringDataWebConfiguration或 启用HATEOAS的等效项并覆盖pageableResolver()或 sortResolver()方法并导入您的自定义配置文件 而不是使用@ Enable-annotation。
对于格式我会使它成为逗号分隔的3个元素的字符串:字段名称,方向,ignoreCase标志。像这样:
sort=name,ASC,ignore
最后一个元素是可选的,因此可以:
sort=name,ASC
这意味着ignoreCase为false。
此外,应该只能指定字段名称,如:
sort=name
这意味着ASC和ignoreCase的默认方向为false。
唯一的问题是如果你想传递ignoreCase标志,你必须通过我认为不应该是一个大问题的方向。
希望这有帮助!
这是这个改进的JIRA项https://jira.spring.io/browse/DATACMNS-658(扩展SortHandlerMethodArgument解析器,以便能够检测到ignore-case的请求)
答案 1 :(得分:0)
如果有人使用 Spring Data Commons 2.3 RC1 或更高版本并查找查询参数,请使用以下内容。 (忽略大小写在 Spring Data Commons 2.3 RC1 及更高版本中是开箱即用的)
sort=name,ASC,ignorecase