Spring MVC:如何从 Pageable 获取 case-insensitive 排序
Spring MVC: how to get case-insensitive ordering from Pageable
当用户单击我网页上的列标题时,我正尝试在我的 Spring MVC 应用程序中支持 case-insensitive 排序。呈现页面时,Thymeleaf 扩展会创建一个锚点,href
是当前 URL,其中一些参数受 Pageable
支持:即 page, size and sort
.
sort=propertyName,ASC
格式工作正常,但我无法从 URL 中找出如何说排序应该是 case-insensitive。我可以很容易地在代码中做到这一点,但标准的 Pageable 支持似乎不支持它。
经过一些调试后,标准框架 org.springframework.data.web.SortHandlerMethodArgumentResolver
似乎不支持 org.springframework.data.domain.Sort.Order.ignoreCase
。
我对此感到有些困惑,想知道是否有充分的理由?
我可以考虑创建自己的 SortHandlerMethodArgumentResolver
class,并让它解析 ASCI|DESCI
(表示 case-insensitive)和 ASCS|DESCS
(表示意思是 case-sensitive) 并生成适当的 Sort
object,但这让我印象深刻,因为这是相当多的工作和严肃的 "code smell".
我不是第一个偶然发现这个的人。有人有什么建议吗?
我认为唯一的选择是实现您的自定义 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 Data Commons 2.3 RC1 或更高版本并寻找查询参数,请使用以下内容。 (忽略大小写在 Spring Data Commons 2.3 RC1 及更高版本中开箱即用)
sort=name,ASC,ignorecase
当用户单击我网页上的列标题时,我正尝试在我的 Spring MVC 应用程序中支持 case-insensitive 排序。呈现页面时,Thymeleaf 扩展会创建一个锚点,href
是当前 URL,其中一些参数受 Pageable
支持:即 page, size and sort
.
sort=propertyName,ASC
格式工作正常,但我无法从 URL 中找出如何说排序应该是 case-insensitive。我可以很容易地在代码中做到这一点,但标准的 Pageable 支持似乎不支持它。
经过一些调试后,标准框架 org.springframework.data.web.SortHandlerMethodArgumentResolver
似乎不支持 org.springframework.data.domain.Sort.Order.ignoreCase
。
我对此感到有些困惑,想知道是否有充分的理由?
我可以考虑创建自己的 SortHandlerMethodArgumentResolver
class,并让它解析 ASCI|DESCI
(表示 case-insensitive)和 ASCS|DESCS
(表示意思是 case-sensitive) 并生成适当的 Sort
object,但这让我印象深刻,因为这是相当多的工作和严肃的 "code smell".
我不是第一个偶然发现这个的人。有人有什么建议吗?
我认为唯一的选择是实现您的自定义 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 Data Commons 2.3 RC1 或更高版本并寻找查询参数,请使用以下内容。 (忽略大小写在 Spring Data Commons 2.3 RC1 及更高版本中开箱即用)
sort=name,ASC,ignorecase