Mar*_*cus 5 spring spring-mvc spring-data-jpa
当用户单击网页上的列标题时,我试图在Spring MVC应用程序中支持不区分大小写的排序。呈现页面时,Thymeleaf扩展名将创建一个锚点,这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
要自定义此行为,请扩展 SpringDataWebConfiguration 或启用 HATEOAS 的等效项,并覆盖 pageableResolver() 或 sortResolver() 方法并导入自定义配置文件,而不是使用 @Enable-annotation。
对于格式,我将其设为由 3 个元素组成的逗号分隔字符串:字段名称、方向、ignoreCase 标志。像这样的东西:
sort=name,ASC,ignore
Run Code Online (Sandbox Code Playgroud)
最后一个元素是可选的,因此可以有:
sort=name,ASC
Run Code Online (Sandbox Code Playgroud)
这意味着ignoreCase是错误的。
此外,应该可以仅指定字段名称,例如:
sort=name
Run Code Online (Sandbox Code Playgroud)
这意味着 ASC 和ignoreCase 的默认方向是 false。
唯一的问题是,如果你想传递ignoreCase标志,你必须传递方向,我认为这不应该是一个大问题。
希望这可以帮助!
顺便说一句,这里是一个用于此改进的 JIRA 项目https://jira.spring.io/browse/DATACMNS-658(扩展 SortHandlerMethodArgument 解析器以能够检测忽略大小写的请求)
| 归档时间: |
|
| 查看次数: |
3721 次 |
| 最近记录: |