【问题标题】:Mapping request params/ path variable to Dto in GET request in Spring在 Spring 的 GET 请求中将请求参数/路径变量映射到 Dto
【发布时间】:2023-04-04 13:50:01
【问题描述】:

我想创建一个返回 Page 对象的控制器。我需要页面Pageable 具有页码及其大小(不能大于50)和一些将作为搜索条件的变量。如果这是一个 POST 请求,它可能如下所示:

public Page<SomeDto) getDto(@RequestBody @Valid RequestDto requestDto, Page pageRequest)

但是,这是一个 GET 请求,因此不能/不应该使用 @RequestBody。 此外,我想要类似于 @Valid 的东西,这样 Spring 会自动拒绝错误的请求。

我想知道是否:

  1. 有可能,如果可以,如何实现这一点,并且已经根据从 URL(@PathVariable 或 @RequestParam)获取的值创建了 Dto,就好像它是将主体映射到对象的 POST 请求一样。

我想避免使用某种代码:

public String updateFoos(@RequestParam Map<String,String> allParams) {}

  1. 如果第 1 条中描述的内容不可行,哪种解决方案最能满足这些要求?

【问题讨论】:

  • 请澄清“但是,这是一个 POST 请求,因此无法使用 @RequestBody。”你的意思是 GET 吗?
  • @tobhai 是的。我会改变我的问题。

标签: java spring validation


【解决方案1】:

无论使用什么 HTTP 方法,每个 HTTP 请求都可以有一个 HTTP 正文(因此也有一个 @RequestBody)。但是,将 HTTP 正文用于 GET 请求并不是一个好的 REST API 设计(参见https://martinfowler.com/articles/richardsonMaturityModel.html

您可以使用@PathVariable 或@RequestParam 参数进行bean 验证,您只需将所需的注释放在这些注释旁边

【讨论】:

    猜你喜欢
    • 2011-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多