【发布时间】:2021-04-21 22:30:41
【问题描述】:
我有兴趣重载 @PostMapping 或 /digital/testCase,它有两个单独的签名,它们使用 @RequestBody 注释来传递数据,而不是 @RequestParams。这很重要,因为 StackOverflow 上的所有其他问题都与后者有关。目前,当我尝试重载函数时,Spring Boot 会崩溃。
对于那些有兴趣查看代码的人来说,它看起来像这样
package com.example.test;
import *
@RestController
@RequestMapping(path = "/digital", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public class TestController {
private static final Logger LOG = LoggerFactory.getLogger(TestController.class);
@Autowired
private testDomain testDomain;
@PostMapping("/testCase")
public ResponseEntity<Object> testCase(@RequestBody InitiateTestCase initiateTestCase,
HttpServletRequest request) {
//
...some code here
//
}
@PostMapping("/testCase")
public ResponseEntity<Object> testCase(@RequestBody InitiateTestCase[] initiateTestCases,
HttpServletRequest request) {
//
...some code here
//
}
}
【问题讨论】:
-
不,这在春季不可用
-
确切地说,您希望 Spring 如何区分两个控制器方法之间的传入调用?
-
这不起作用,因为它会导致将单个 URL 映射到 2 个方法。 Spring 无法区分调用哪一个。
@PostMapping中的内容用于将传入的请求映射到一个方法,每个方法的属性组合必须是唯一的。 -
@chrylis - 好吧,我希望和/或在想,理想情况下,Spring 可以主动将 JSON 结构与两个 RequestBody 定义进行比较,如果匹配,则使用该方法...我假设我实际上可能有兴趣将其编写为包装器方法(例如,URL 命中包装器方法)。然后让包装器方法使用重载来调用函数......理想情况下,需要发生重载(或一些可行的替代品,如功能链),因为被命中的 URL 必须根据项目需要接受这些情况的各种格式.
标签: java spring spring-boot spring-mvc overloading