我遇到了一些挑战,并在不久之后描述了我创建的测试应用程序。您可以在下面看到的代码和错误。
@RestController
public class TestController {
@PostMapping(value = "/test",params = { "a", "b" })
public String test(@RequestPart MultipartFile a, @RequestPart(required = false) MultipartFile b) {
return "test1";
}
@PostMapping(value = "/test", params = { "b" })
public String test(@RequestPart MultipartFile b) {
return "test2";
}
}
我正在尝试执行邮递员的请求:
我在日志中遇到这样的错误:
Resolved [org.springframework.web.bind.UnsatisfiedServletRequestParameterException:
Parameter conditions "a, b" OR "b" not met for actual request parameters: ]
问题是,如果我也将参数放在邮递员中(而不是正文中,放在请求URL:localhost:8080/test?b=anything
中),它将很好地工作,但我不需要在URL中添加请求参数。
是否有一些可行的方法?
答案 0 :(得分:0)
您应该尝试以下类似方法。
@RestController
public class TestController {
@PostMapping(value = "/test")
public String test(@RequestParam MultipartFile a, @RequestParam(required = false) MultipartFile b) {
return "test1";
}
@PostMapping(value = "/test")
public String test(@RequestParam MultipartFile b) {
return "test2";
}
}
答案 1 :(得分:0)
您不能两次映射包含相同Http方法的相同签名,然后会发生以下错误。
java.lang.IllegalStateException: Ambiguous handler methods
尝试这个
@RestController
public class TestController {
@PostMapping("/test")
public String test(@RequestParam MultipartFile a, @RequestParam(required = false) MultipartFile b) {
return "test1";
}
@PostMapping("/test2")
public String test(@RequestParam MultipartFile b) {
return "test2";
}
}
答案 2 :(得分:0)
我能够覆盖@PostMapping。但是参数的类型应该不同。
@PostMapping(value="/test" )
public String testApi(@ModelAttribute MultipartDTO multipartDTO) {
return "test1";
}
@PostMapping(value="/test" ,params = { "b" })
public String test(@RequestParam String b) {
return "test2";
}
/ ** DTO ** /
@Data
public class MultipartDTO{
private MultipartFile a;
private MultipartFile b;
}