java - 在 Spring 的 GET 请求中将请求参数/路径变量映射到 Dto
问题描述
我想创建一个将返回 Page 对象的控制器。我需要页面Pageable
有页码及其大小(不能大于 50)和一些变量,这些变量将成为搜索条件。如果这是一个 POST 请求,它可能如下所示:
public Page<SomeDto) getDto(@RequestBody @Valid RequestDto requestDto, Page pageRequest)
但是,它是一个 GET 请求,因此@RequestBody
不能/不应该使用。此外,我想要类似于 @Valid 的东西,这样 Spring 会自动拒绝错误的请求。
我想知道是否:
- 有可能,如果是这样,如何实现这一点,并且已经从从 URL(@PathVariable 或 @RequestParam)获取的值创建了 Dto,就好像它是将主体映射到对象的 POST 请求一样。
我想避免使用某种代码:
public String updateFoos(@RequestParam Map<String,String> allParams) {}
- 如果第 1 条中描述的内容是不可能的,那么最接近满足这些要求的解决方案是什么?
解决方案
@RequestBody
无论使用什么 HTTP 方法,每个 HTTP 请求都可以有一个 HTTP 正文(因此也有一个)。但是,将 HTTP 主体用于 GET 请求并不是一个好的 REST API 设计(参见https://martinfowler.com/articles/richardsonMaturityModel.html)
您可以使用 @PathVariable 或 @RequestParam 参数进行 bean 验证,您只需将所需的注释放在这些注释旁边
推荐阅读
- java - 如何从firebase数据库中获取一个孩子
- java - Intellij上“clean”和“clean tomcat工作目录”的等效操作是什么?
- amazon-ecs - 阶梯函数 - sqs - ecs
- c# - 方法不断将相同的东西添加到列表中
- c# - 您将如何在删除其余数字的同时提取一组数字中的第一个数字?
- google-cloud-platform - Google Speech to Text 最佳值
- kendo-ui - Kendo UI 无法绑定 ViewModel
- python - 虽然循环没有以“break”退出
- javascript - JavaScript解释器如何将全局语句添加到事件队列中?
- python - 在捕获并立即引发异常时避免“在处理上述异常期间,发生了另一个异常”