Spring MVC : how to get case-insensitive ordering from Pageable

标签 spring spring-mvc spring-data-jpa

当用户单击网页上的列标题时,我尝试在 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/

相关文章:

spring - H2 SQL语法异常

java - Spring MVC - 处理错误并传递给 View 的通用方法

java - Spring JPA 存储库无法捕获 EntityNotFoundException

java - 创建 bean 'entityManagerFactory' 时出错,嵌套的 HibernateException : Unable to get the default Bean Validation factory

java - 由 : java. lang.UnsupportedOperationException: null Lombok with List 引起

java - Color HttpMessageConverter 但缺少 Color 的默认构造函数

spring - 如何在 Grails 3.1.6+ 中配置 SSL?

java - 使用 JSR-250 (@RolesAllowed) 注释 Spring MVC 和容器身份验证

Java - 反射 - 如何使用反射获取@RequestHeader值

Spring Cloud 配置服务器 + BitBucket