【问题标题】:Query parameter values does not bind to Spring Pageable查询参数值不绑定到 Spring Pageable
【发布时间】:2020-02-07 11:57:56
【问题描述】:

我的 Spring Boot 应用程序控制器包含如下方法,带有可选的 Pageable 参数。

@RequestMapping(method = RequestMethod.GET)
@Override
public Page<MarkupView> getAllMarkup(Pageable pageable) {
    System.out.println("Page size" + pageable.getPageSize() ) // prints 20
    return markupService.getAllMarkups(pageable);
}

我的问题是当我使用 swagger-ui 传递查询参数时,这些值不会绑定到可分页对象。为什么我说无论我是否将值 5 作为查询参数传递,它都会将 pageSize 打印为 20。

请求网址: http://localhost:8080/api/markups?offset=2&pageNumber=1&pageSize=5

上面的 Get 请求返回包含所有 MarkupView 记录的页面对象。

【问题讨论】:

标签: java spring-boot spring-data-jpa swagger-ui query-parameters


【解决方案1】:

参考Spring Data Web Support 的第 5 节。请检查您是否遵循上述配置。然后将查询参数名称从pageNumber更新为page,将pageSize更新为size。

【讨论】:

    【解决方案2】:

    我不知道你为什么这样实现它。我宁愿按原样接收请求参数,然后将它们设置在 pojo 中,而不是这样做。我在我的机器上测试了它,它会按预期绑定。看看下面的实现是否有帮助!

      @GetMapping("/api/markups")
      @Override
      public Page<MarkupView> getAllMarkup(final @RequestParam(name = "pageSize", required = false) Integer pageSize, final @RequestParam(name = "offset", required = false) Integer offset, final @RequestParam(name = "pageNumber", required = false) Integer pageNumber) {
        System.out.println("Page size" + pageSize ); 
        System.out.println("offset" + offset );
        System.out.println("Page number" + pageNumber );
        return markupService.getAllMarkups(pageSize,offset,pageNumber);
      }
    

    【讨论】:

    • 这超出了使用 Spring 和自动绑定到对象的目的。
    • @M.Deinum 是的!我想要的是实现与对象的自动绑定。
    • 哎哟!是的,我的错!那么如何才能做得更好呢?另外,将页码和大小等参数绑定到对象不是矫枉过正吗?
    • @SachithraWishwamal 你能把你的 DTO 添加到问题中吗
    • 不是,因为Pageable是Spring Data可以理解的对象,可以直接在方法参数中使用。
    猜你喜欢
    • 2016-01-13
    • 1970-01-01
    • 2016-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-14
    • 2013-12-26
    相关资源
    最近更新 更多