Spring MVC:如何从Pageable获取不区分大小写的排序

时间:2015-05-05 17:16:58

标签: spring spring-mvc spring-data-jpa

当用户点击我网页上的列标题时,我试图在我的Spring MVC应用程序中支持不区分大小写的排序。呈现页面时,Thymeleaf扩展会创建一个锚点,href是当前网址,其中包含Pageable支持的一些参数:page, size and sort

sort=propertyName,ASC格式正常,但我无法找到如何说该排序应该不区分大小写的URL。我可以很容易地在代码中完成它,但标准的Pageable支持似乎并不支持它。

经过一些调试后,似乎标准框架org.springframework.data.web.SortHandlerMethodArgumentResolverorg.springframework.data.domain.Sort.Order.ignoreCase没有任何支持。

我对此感到有些困惑,我想知道是否有充分的理由?

我可以考虑创建自己的SortHandlerMethodArgumentResolver类,并使其解析ASCI|DESCI(表示不区分大小写)和ASCS|DESCS(表示区分大小写)并生成适当的Sort对象,但这让我感到非常困难,并且有一种严肃的代码味道"。

我无法成为第一个偶然发现这一点的人。有没有人有任何建议?

2 个答案:

答案 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