我需要添加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(使用前将#替换为@)