【问题标题】:How to configure PageableHandlerMethodArgumentResolver in spring boot application如何在 Spring Boot 应用程序中配置 PageableHandlerMethodArgumentResolver
【发布时间】:2016-02-14 20:57:52
【问题描述】:

我有一个spring boot应用,我想配置PageableHandlerMethodArgumentResolver,我试了下面的代码,还是不行:

@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {

    // .......

    @Override
    public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
        PageableHandlerMethodArgumentResolver resolver = new PageableHandlerMethodArgumentResolver();
        resolver.setFallbackPageable(new PageRequest(0, 50));
        argumentResolvers.add(resolver);
        super.addArgumentResolvers(argumentResolvers);
    }
}

控制器方法:

@Override
@PreAuthorize("hasRole('ROLE_SYS_ADMIN')")
@RequestMapping(method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<Page<Account>> query(@QuerydslPredicate Predicate predicate,
        @PageableDefault Pageable pageable) {
    return new ResponseEntity<>(accountRepo.findAll(predicate, pageable), HttpStatus.OK);
}

它是一个简单的Boot App,只是玩spring boot,没有空WebConfig配置类

@Configuration
public class WebConfig {

    @Bean
    public Filter html5ModeFilter() {
        return new Html5ModeFilter();
    }
}

这是我的配置类列表:

Html5ModeFilter.java
SecurityConfig.java
ServletInitializer.java
UserDetailsAdapter.java
WebConfig.java

【问题讨论】:

  • 这似乎是正确的。没用是什么意思?
  • 实际调用了代码,但没有影响,也就是不使用回退页面请求的时间。
  • 添加一个使用 Pageable 的控制器以及有关您的项目结构的更多信息

标签: java spring spring-boot


【解决方案1】:

从以下位置删除@PageableDefault

public ResponseEntity<Page<Account>> query(..., @PageableDefault Pageable pageable) {
    ...
}

PageableDefault 注释看起来像这样:

public @interface PageableDefault {
    int value() default 10;
    int size() default 10;
    int page() default 0;
    ...
} 

这些default 值将覆盖您的后备值,您将看到前十个结果。

【讨论】:

    【解决方案2】:

    spring-data-commons 版本 2.0 开始,有 2 个新类将使这种事情变得更容易:

    • SortHandlerMethodArgumentResolverCustomizer
    • PageableHandlerMethodArgumentResolverCustomizer

    很遗憾,这不是 Spring Boot 当前版本 (1.5.9) 附带的版本,因此更换风险自负。

    @Bean 
    PageableHandlerMethodArgumentResolverCustomizer sortCustomizer() {
        // s is PageableHandlerMethodArgumentResolver
        return p -> p.setFallbackPageable(new PageRequest(0, 50));
    }
    

    这只是现在设置后备的另一种方法。 @Ali Dehghani 的回答仍然适用于 Default 覆盖 Fallback

    Spring Data Web Support

    【讨论】:

    猜你喜欢
    • 2016-05-09
    • 2016-08-26
    • 2015-06-05
    • 2018-01-18
    • 1970-01-01
    • 2016-06-12
    相关资源
    最近更新 更多