Json Spring数据Rest-配置分页

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.

在版本2.1.0中将Spring数据REST与JPA一起使用

如何配置分页以使页面参数从索引1而不是0开始

我已尝试使用
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" />