Spring Data Rest - Configure pagination

☆樱花仙子☆ 提交于 2019-11-29 08:31:26

The easiest way to do so is to subclass RepositoryRestMvcConfiguration and include your class into your configuration:

class CustomRestMvcConfiguration extends RepositoryRestMvcConfiguration {

  @Override
  @Bean
  public HateoasPageableHandlerMethodArgumentResolver pageableResolver() {

    HateoasPageableHandlerMethodArgumentResolver resolver = super.pageableResolver();
    resolver.setOneIndexedParameters(true);
    return resolver;
  }
}

In your XML configuration, replace:

<bean class="….RepositoryRestMvcConfiguration" />

with

<bean class="….CustomRestMvcConfiguration" />

or import the custom class instead of the standard one in your JavaConfig file.

I have configured the RequestMappingHandlerAdapter using a BeanPostProcessor, however I believe that's neither clean, nor elegant. That looks more like a hack. There must be a better way ! I'm giving the code below just for reference.

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>
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!