【问题标题】:RestController fill automatically request body and headersRestController 自动填充请求正文和标头
【发布时间】:2021-01-16 02:37:23
【问题描述】:

我们有 RestController 端点,它们在正文中接收参数,也从标头中接收参数

所以我们创建了 RequestVO 对象,它会自动填充 JSON(/XML) 参数

@PostMapping
public @ResponseBody ResponseEntity<String> endpoint(@RequestBody RequestVO requestVO, HttpServletRequest httpRequest) {

但是对于请求/标头的参数,我们必须使用 setter 来填充值

有没有办法用 headers/request 参数自动填充对象?

【问题讨论】:

  • 似乎这会让 API 的用户感到困惑,其中RequestVO 定义了实际上不能在有效负载中使用的属性。考虑创建一个DomainRequestVO,它由RequestVO 和标头值组成。
  • @AndrewS 但如何自动填充标题和正文?
  • 我会将它们分开,其中RequestVO 包含正文中预期的属性,以及通过@RequestHeader 的标题(Michal Drozd 的回答)。然后在endpoint 方法中,使用构建器来组合RequestVO 和标头的域对象。并将域对象传递给服务层。
  • 另一种选择可能是在到达端点之前使用过滤器或拦截器来组合正文和标头。但这可能会使其他过程复杂化,例如生成 OpenAPI 文档。
  • @AndrewS 你有好处

标签: java spring spring-restcontroller


【解决方案1】:

如果我理解正确,你可以使用这样的东西

@RequestHeader(value="Key") String value,
@RequestHeader(value="Content-Type") String contentType,

...

【讨论】:

  • 好的,但我想要一个对象 (RequestVO) 填充所有这些值
  • 那么我相信你需要实现自己的转换器(检查 ConverterFactory 等),有办法将传入的请求转换为你想要的对象。
  • afaik 我相信用标头填充请求正文将是一项重大更改
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-05
  • 1970-01-01
  • 2020-12-23
  • 1970-01-01
  • 2017-01-24
  • 2022-01-05
  • 1970-01-01
相关资源
最近更新 更多