2014-05-07 139 views
2

在2.1.0版本中使用Spring Data REST和JPA。Spring Data Rest - 配置分頁

如何配置分頁以使頁面參數從索引1開始而不是0開始?

我已經嘗試設置自定義HateoasPageableHandlerMethodArgumentResolvermvc:argument-resolvers,但是,這並不工作:

<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 。

但是我怎麼能做到這一點?如果可能,以乾淨優雅的方式?

回答

4

這樣做最簡單的方法是繼承RepositoryRestMvcConfiguration,包括你的類到您的配置:

class CustomRestMvcConfiguration extends RepositoryRestMvcConfiguration { 

    @Override 
    @Bean 
    public HateoasPageableHandlerMethodArgumentResolver pageableResolver() { 

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

在你的XML配置,替換:

<bean class="….RepositoryRestMvcConfiguration" /> 

<bean class="….CustomRestMvcConfiguration" /> 

或導入JavaConfig文件中的自定義類而不是標準類。

+2

這就像一個魅力。而且它比使用BeanPostProcessor更麻煩。謝謝。 – jplandrain

+1

任何人都知道這是一個易於配置的屬性嗎?看起來像一個應該只是一面旗幟的東西,特別是像Spring Boot這樣的東西 – Snekse

1

我已經使用BeanPostProcessor配置了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> 
相關問題