Json Spring数据Rest-配置分页
在版本2.1.0中将Spring数据REST与JPA一起使用 如何配置分页以使页面参数从索引1而不是0开始 我已尝试使用Json Spring数据Rest-配置分页,json,rest,spring-mvc,spring-data,spring-data-rest,Json,Rest,Spring Mvc,Spring Data,Spring Data Rest,在版本2.1.0中将Spring数据REST与JPA一起使用 如何配置分页以使页面参数从索引1而不是0开始 我已尝试使用mvc:argument resolvers设置自定义HateoasPageableHandlerMethodArgumentResolver,但这不起作用: <mvc:annotation-driven> <mvc:argument-resolvers> <bean class="org.springframework.data.
mvc:argument resolvers
设置自定义HateoasPageableHandlerMethodArgumentResolver
,但这不起作用:
<mvc:annotation-driven>
<mvc:argument-resolvers>
<bean class="org.springframework.data.web.HateoasPageableHandlerMethodArgumentResolver">
<property name="oneIndexedParameters" value="true"/>
</bean>
</mvc:argument-resolvers>
</mvc:annotation-driven>
请注意,此行为与mvc:argument resolver
的文档完全一致,其中说明:
使用此选项不会覆盖对的内置支持
解析处理程序方法参数。自定义内置支持的步骤
对于参数解析,请配置RequestMappingHandlerAdapter
直接的
但我怎样才能做到这一点呢?如果可能,我已使用
benpostprocesor
,以干净优雅的方式?我已经使用beanpstprocesor
配置了RequestMappingHandlerAdapter
,但我认为这既不干净,也不优雅。那看起来更像是黑客。一定有更好的办法!下面的代码仅供参考
public class RequestMappingHandlerAdapterCustomizer implements BeanPostProcessor {
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
if (bean instanceof RequestMappingHandlerAdapter) {
RequestMappingHandlerAdapter adapter = (RequestMappingHandlerAdapter)bean;
List<HandlerMethodArgumentResolver> customArgumentResolvers = adapter.getCustomArgumentResolvers();
if(customArgumentResolvers != null) {
for(HandlerMethodArgumentResolver customArgumentResolver : customArgumentResolvers) {
if(customArgumentResolver instanceof HateoasPageableHandlerMethodArgumentResolver) {
HateoasPageableHandlerMethodArgumentResolver hateoasPageableHandlerMethodArgumentResolver = (HateoasPageableHandlerMethodArgumentResolver)customArgumentResolver;
hateoasPageableHandlerMethodArgumentResolver.setOneIndexedParameters(true);
}
}
}
}
return bean;
}
public Object postProcessBeforeInitialization(Object bean, String beanName)
throws BeansException {
return bean;
}
}
<beans ...>
<bean class="util.spring.beanpostprocessors.RequestMappingHandlerAdapterCustomizer" />
</beans>
公共类RequestMappingHandlerAdapterCustomizer实现BeanPostProcessor{
公共对象后处理初始化后(对象bean、字符串beanName)抛出BeansException{
if(RequestMappingHandlerAdapter的bean实例){
RequestMappingHandlerAdapter=(RequestMappingHandlerAdapter)bean;
列出CustomArgumentResolver=adapter.getCustomArgumentResolver();
if(CustomArgumentResolver!=null){
用于(HandlerMethodArgumentResolver customArgumentResolver:customArgumentResolver){
if(HateoasPageableHandlerMethodArgumentResolver的customArgumentResolver实例){
HateoasPageableHandlerMethodArgumentResolver HateoasPageableHandlerMethodArgumentResolver=(HateoasPageableHandlerMethodArgumentResolver)customArgumentResolver;
hateoasPageableHandlerMethodArgumentResolver.setOneIndexedParameters(true);
}
}
}
}
返回豆;
}
初始化前的公共对象后处理(对象bean、字符串bean名称)
抛出BeansException{
返回豆;
}
}
最简单的方法是将RepositoryRestMvcConfiguration子类化,并将类包含到配置中:
class CustomRestMvcConfiguration extends RepositoryRestMvcConfiguration {
@Override
@Bean
public HateoasPageableHandlerMethodArgumentResolver pageableResolver() {
HateoasPageableHandlerMethodArgumentResolver resolver = super.pageableResolver();
resolver.setOneIndexedParameters(true);
return resolver;
}
}
在XML配置中,替换:
<bean class="….RepositoryRestMvcConfiguration" />
与
或者导入自定义类而不是JavaConfig文件中的标准类。这就像一个符咒。而且它比使用BeanPostProcessor更简单。谢谢。有人知道这是否是一个易于配置的属性吗?看起来像是一个应该只是一面旗帜的东西,特别是在像Spring Boot这样的东西中
<bean class="….CustomRestMvcConfiguration" />