【发布时间】: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