在发布请求中传递可分页(弹簧数据) [英] Passing pageable (spring data) in post request

查看:45
本文介绍了在发布请求中传递可分页(弹簧数据)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个具有以下 API 的休息 API 服务器.我还有其他一些 API,可以从 GET 请求中获得分页.在这里,我需要发出一个 post 请求来传递 queryDto.所以,我不能将 page=0?size=20 等作为 url 参数传递.

I have a rest API server which has the following API. I have some other APIs, where i get pageable from GET requests. Here, I need to make a post request for passing the queryDto. So, I cannot pass the page=0?size=20 etc as url parameters.

我想知道如何将 pageable 作为 JSON 对象传递给 POST 请求

I would like to know how to pass pageable as JSON object to a POST request

@RequestMapping(value = "/internal/search", method = RequestMethod.POST)
@ResponseStatus(HttpStatus.OK)
@ResponseBody
public ResponseList<Object> findObjects(@RequestBody QueryDto queryDto, Pageable pageable) {
    if (queryDto.isEmpty()) {
        throw new BadRequestException();
    }

    return someService.findObjectsByQuery(queryDto, pageable);
}

推荐答案

我认为这是不可能的,至少框架还没有提供.

I Think that is not possible, at least not already provided by the framework.

Spring 有一个 HandlerMethodArgumentResolver 接口和一个名为 PageableHandlerMethodArgumentResolver 的实现,它检索请求参数值,调用类似 HttpServletRequest.getParameter 的东西.因此,您可以绑定 Pageable 实例,为 GET 和 POST 传递参数page"和size".因此,以下代码有效:

The Spring has a HandlerMethodArgumentResolver interface with an implementation called PageableHandlerMethodArgumentResolver that retrieves the request param value calling something like HttpServletRequest.getParameter. So, you can bind the Pageable instance passing the parameters "page" and "size" for GET and POST. So, the following code works:

@RequestMapping(value="/test",method = RequestMethod.POST)
@ResponseBody
public String bindPage(Pageable page){
    return page.toString();
}

$ curl -X POST --data "page=10&size=50" http://localhost:8080/test

$ curl -X POST --data "page=10&size=50" http://localhost:8080/test

返回:页面请求 [数量:10,大小 50,排序:空]

Return: Page request [number: 10, size 50, sort: null]

但是,如果你传递一个 json,什么都不会发生:

But, if you pass an json nothing happens:

$ curl -X POST --data "{page:10&size:50}" http://localhost:8080/测试

$ curl -X POST --data "{page:10&size:50}" http://localhost:8080/test

返回:页面请求 [数量:0,大小 20,排序:空]

Return: Page request [number: 0, size 20, sort: null]

这篇关于在发布请求中传递可分页(弹簧数据)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆