在post请求中传递可分页(spring数据)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在post请求中传递可分页(spring数据)相关的知识,希望对你有一定的参考价值。
我有一个其他API服务器,它具有以下API。我有一些其他的API,我可以从GET
请求中分页。在这里,我需要发送一个传递queryDto的帖子请求。所以,我不能将page=0?size=20
等作为url参数传递。
我想知道如何将pageable作为JSON对象传递给POST
请求
@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);
我认为这是不可能的,至少框架没有提供。
Spring有一个HandlerMethodArgumentResolver
接口,带有一个名为PageableHandlerMethodArgumentResolver
的实现,它检索调用类似HttpServletRequest.getParameter的请求参数值。因此,您可以绑定传递参数“page”和“size”的Pageable实例以进行GET和POST。因此,以下代码有效:
@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
返回:页面请求[编号:10,大小50,排序:null]
但是,如果你传递一个json没有任何反应:
$ curl -X POST --data“page:10&size:50”http://localhost:8080/test
返回:页面请求[编号:0,大小20,排序:null]
如果你继续在URL上提供它们作为查询参数,并且仍在发布数据,那对我来说似乎工作得很好。
POST http://localhost:8080/xyz?page=2&size=50
Content-Type: application/json
"filterABC": "data"
Spring似乎将页面,大小,排序等转换为提供给方法的Pageable。
创建一个将Pageable和QueryDto对象作为成员的类。然后在这个新对象的post体中传递JSON。
例如,
public class PageableQueryDto
private Pageable pageable;
private QueryDto queryDto;
... getters and setters.
编辑如下面的注释所述,您可能需要实现Pageable接口。结果可能是这样的:
public class PageableQueryDto implements Pageable
private Pageable pageable;
private QueryDto queryDto;
... getters and setters.
... Implement the Pageable interface. proxy all calls to the
... contained Pageable object.
... for example
public void blam()
pageable.blam();
... or maybe
public void blam()
if (pageable != null)
pageable.blam();
else
... do something.
Spring Post方法
@RequestMapping(value = "/quickSearchAction", method = RequestMethod.POST)
public @ResponseBody SearchList quickSearchAction(@RequestParam(value="userId") Long userId,
Pageable pageable) throws Exception
return searchService.quickSearchAction(userId, pageable);
邮差示例:
http://localhost:8080/api/actionSearch/quickSearchAction?
userId=4451&number=0&size=20&sort=titleListId,DESC
在上面,POST Pageable用于Spring RESTful服务中的排序和分页。在URL处使用以下语法。
数字0
,大小20
,按字段titleListId
排序和方向DESC
所有传递参数在内部通过Pageable识别为Sorting / Pagination参数,如下所示
number - Page number
size - Page Size
sort - sort by(Order by)
direction - ASC / DESC
以上是关于在post请求中传递可分页(spring数据)的主要内容,如果未能解决你的问题,请参考以下文章
使用连接表存储库的@manytomany 中的 Spring 数据 jpa 规范和可分页
如何使用 Datatable 以 POST 类型传递请求正文数据以使用 Javascript 进行服务器端分页