重载SpringBoot @PostMapping控制器方法不起作用

时间:2020-07-16 17:01:23

标签: spring-boot spring-mvc spring-restcontroller

我遇到了一些挑战,并在不久之后描述了我创建的测试应用程序。您可以在下面看到的代码和错误。

@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";
    }
}

我正在尝试执行邮递员的请求:

Postman Request

我在日志中遇到这样的错误:

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中添加请求参数。

是否有一些可行的方法?

3 个答案:

答案 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;
}