如何替换默认的 SortArgumentResolver

2024-01-11

我需要添加private static final Sort sortById = new Sort(Sort.Direction.DESC, ID);每一个Pageable。我想,最好的方法是创建装饰器/适配器SortArgumentResolver.

我已经创建了类:

public class IdSortArgumentResolver implements SortArgumentResolver {

private static final String ID = "id";
private static final Sort sortById = new Sort(Sort.Direction.DESC, ID);
private final SortArgumentResolver delegate;

public IdSortArgumentResolverAdapter(SortArgumentResolver delegate) {
    this.delegate = delegate;
}

@Override
public boolean supportsParameter(MethodParameter methodParameter) {
    return delegate.supportsParameter(methodParameter);
}

@Override
public Sort resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) {
    Sort sort = delegate.resolveArgument(parameter, mavContainer, webRequest, binderFactory);
    if (isNull(sort)) {
        return sortById;
    }
    if (containsSortById(sort)) {
        return sort;
    }
    return sort.and(sortById);
}

private static boolean containsSortById(Sort currentSort) {
    return StreamSupport.stream(currentSort.spliterator(), false)
                        .anyMatch(order -> ID.equalsIgnoreCase(order.getProperty()));
}

}

我如何更改默认值SortArgumentResolver to IdSortArgumentResolver?是否可以?或者也许有更好的方法来做到这一点......

P.S 这是spring-boot 1.5.2 RELEASE和当前的SortHandlerMethodArgumentResolver配置在SpringDataWebConfiguration


注意:在您的帖子中,您的班级名称是IdSortArgumentResolver但你的构造函数是IdSortArgumentResolverAdapter.

创建一个配置类扩展WebMvcConfigurerAdapter:

@Configuration
public class WebMvcConfiguration extends WebMvcConfigurerAdapter {

    // ...
}

覆盖addArgumentResolvers方法并配置你的Sort and Pageable解析器:

@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
    // FIXME Replace null with what you want
    SortArgumentResolver sortResolver = new IdSortArgumentResolver(null);

    // For sorting resolution alone
    argumentResolver.add(sortResolver);

    PageableHandlerMethodArgumentResolver pageableResolver = new PageableHandlerMethodArgumentResolver(sortResolver);

    // For sorting resolution encapsulated inside a pageable
    argumentResolver.add(pageableResolver);
}

更好的解决方案没有自定义类:

@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
    SortHandlerMethodArgumentResolver sortResolver = new SortHandlerMethodArgumentResolver();

    sortResolver.setFallbackSort(new Sort(Sort.Direction.DESC, "id"));

    // For sorting resolution alone
    argumentResolver.add(sortResolver);

    PageableHandlerMethodArgumentResolver pageableResolver = new PageableHandlerMethodArgumentResolver(sortResolver);

    // For sorting resolution encapsulated inside a pageable
    argumentResolver.add(pageableResolver);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何替换默认的 SortArgumentResolver 的相关文章

随机推荐

  • 修改C++函数中指针指向的位置

    我一直在修改指针的指针上陷入困境 问题是我不明白为什么我的代码有效 我想做的是修改函数中指针指向的位置 然后在我的主函数中访问该值 我尝试了很多次 这是我让它发挥作用的唯一方法 include
  • Hadoop Nodemanager 和 Resourcemanager 未启动

    我正在尝试在 Ubuntu 13 10 64 位上设置最新的 Hadoop 2 2 单节点集群 操作系统是全新安装的 我尝试过使用 java 6 64 位和 java 7 64 位 按照以下步骤操作后this http raseshmori
  • PHP - Strtotime - 添加时间

    我有这个变量 timestamp strftime Y m d h M S a time 我只是想增加三个小时并重复它 我已经看到了可以执行 60 60 3 方法或硬编码 3 小时 的方法 它可以理解这些单词 获得这个结果的最佳方法是什么
  • 在 ASP.NET Web API 控制器的 nunit 测试中实例化新的 System.Web.Http.OData.Query.ODataQueryOptions

    我有一个 ASP NET MVC4 Web API 项目 其中包含 ApiController 继承控制器 该控制器接受 ODataQueryOptions 参数作为其输入之一 我正在使用 NUnit 和 Moq 来测试该项目 这使我能够从
  • midi 文件解析,无法识别的事件类型

    我在尝试解析 MIDI 文件时遇到问题 我正在尝试解析 frets on fire 游戏使用的注释文件 它只使用 midi 文件 所以我认为这无关紧要 如果你们中的任何人熟悉它 我遇到的问题是一般的 midi 问题 我有一个文件 其中有一个
  • 我需要一个不会弄乱我打开的窗口的消息泵

    我的应用程序 我正在开发的安装程序的引导应用程序 需要启动一些其他应用程序 我的安装程序和满足安装程序先决条件的第三方安装程序 并等待它们完成 为了允许 GUI 进行屏幕更新在等待应用程序完成时 我使用有关空闲循环处理的 Visual St
  • Node.js 在 for 循环中调用回调函数

    我试图在 a 中调用一个函数for循环 问题是该函数在循环完成后被调用 以下面为例 它打印到控制台 here1 here1 here2 here2 代替 here1 here2 here1 here2 report forEach item
  • LINQ Lambda 连接错误 - 无法从使用情况推断

    我在加入两个 DbSet 时遇到问题 并继续收到 无法推断错误 我努力寻找解决方案 所以我想我会分享我的简单答案 乔恩 斯基特 Jon Skeet 和其他人发表了几篇很棒的帖子 但大多数答案都超出了我的理解范围 这是给我带来麻烦的代码 us
  • Rails 在新控制器中结合 RESTful 方法

    我有一个 Rails 应用程序 其中users create projects 目前 这些是嵌套的 并作为单独的操作完成 Auser寄存器 然后从project仪表板创建一个新的project 为了提高转化率 以及跟踪来自 adwords
  • PySpark - 将单个整数列表与列表列进行比较

    我正在尝试检查 Spark 数据帧 带有列表的列 中的哪些条目包含给定列表中最大数量的值 我想出的最好的方法是迭代数据框rdd foreach 并使用 python 比较给定列表与每个条目set1 intersection set2 我的问
  • ??空合并运算符 --> 合并是什么意思?

    我很想撒谎说英语是我的第二语言 但事实是我只是不知道 合并 是什么意思 我知道什么 在 C 中是 does 但这个名字对我来说没有意义 我查了一下这个词 我知道它是 加入 的同义词 空连接运算符 仍然没有意义 有人可以启发我吗 我很想撒谎说
  • 如何使用UIAppearance外观WhenContainedIn:

    我注意到在 iOS5 中我们可以通过以下方式自定义 UIKit 控件UIAppearance我开始使用它 我想用appearanceWhenContainedIn 定制UINavigationBar s tintColor在不同的班级 例如
  • 使用 puppeteer 和 MutationObserver 检测 DOM 更改

    我想检测某些加载页面上的 DOM 更改 例如 本地新闻页面上添加的新文章 并在检测后执行某些操作 发送电子邮件 在此示例中 我尝试检测子节点是否已从父节点 目标 div 节点 添加或删除 并在检测后在控制台中输出某些内容 我需要实现暴露功能
  • 在python中读取大csv文件的行

    我有一个非常大的 csv 文件 无法完全加载到内存中 所以我想一块一块地读取它 将其转换为numpy数组 然后再做一些处理 我已经检查过了 在Python中读取大文件的惰性方法 https stackoverflow com questio
  • 如何在谷歌应用程序引擎(Python)中使用numpy

    根据官方文档 numpy 作为谷歌应用程序引擎中的库支持here https developers google com appengine docs python tools libraries27 经过几次尝试后我无法导入它 有人可以分
  • 如何使用 Matplotlib 在对数刻度上显示次要刻度标签

    有谁知道如何使用 Python Matplotlib 以对数刻度显示次要刻度的标签 您可以使用plt tick params axis y which minor 设置小刻度并使用matplotlib ticker FormatStrFor
  • JSON 服务在失败/错误时应返回什么

    我正在用 C ashx 文件 编写 JSON 服务 成功请求服务后 我会返回一些 JSON 数据 如果请求失败 要么是因为抛出了异常 例如数据库超时 要么是因为请求在某种程度上是错误的 例如作为参数给出了数据库中不存在的 ID 服务应该如何
  • 将 Swagger Java 对象转换为 JSON/YAML

    我需要阅读 修改并重新生成 JSON YAML swagger 文件文档 我已经使用 Swagger Parser 反序列化了一个 JSON 文件 并且有一个 Swagger Java 对象 其中原始 JSON 数据已正确映射 现在 我需要
  • Dynamics CRM 视图中的串联/计算列

    我是 MS Dynamics 的新手 我想知道是否有一种方法可以将列添加到视图中 该视图是其他一些列的串联 例如 Firstname Lastname As Fullname 似乎没有一个明显的 优雅的 解决方案 我看到的所有建议都建议使用
  • 如何替换默认的 SortArgumentResolver

    我需要添加private static final Sort sortById new Sort Sort Direction DESC ID 每一个Pageable 我想 最好的方法是创建装饰器 适配器SortArgumentResolv