Java 两种post方法得到模糊映射错误

Java 两种post方法得到模糊映射错误,java,spring,rest,spring-boot,api,Java,Spring,Rest,Spring Boot,Api,我声明了两个post方法。一个用于保存一个对象,另一个用于保存列表。现在的问题是,为了避免出现典型错误,我应该给每一个设置什么路径: 原因:java.lang.IllegalStateException:映射不明确。无法映射 我的控制器具有以下url,例如/faults 以下是我的方法: @PostMapping public ResponseEntity<FaultDTO> save(@RequestBody FaultDTO faultDTO){...} @Post

我声明了两个post方法。一个用于保存一个对象,另一个用于保存列表。现在的问题是,为了避免出现典型错误,我应该给每一个设置什么路径:

原因:java.lang.IllegalStateException:映射不明确。无法映射 我的控制器具有以下url,例如/faults

以下是我的方法:

 @PostMapping
    public ResponseEntity<FaultDTO> save(@RequestBody FaultDTO faultDTO){...}

 @PostMapping
    public ResponseEntity<List<FaultDTO>> saveAll(@RequestBody ArrayList<FaultDTO> list){...}
@PostMapping
公共响应属性保存(@RequestBody FaultDTO FaultDTO){…}
@邮戳
公共响应属性saveAll(@RequestBody ArrayList){…}

编写此api的正确方法是什么?

不能将两个端点绑定到同一个URI和同一个方法,因为这样应用程序就不知道要使用哪个

您需要这样做:

@PostMapping
public ResponseEntity<FaultDTO> save(@RequestBody FaultDTO faultDTO){
   /* your code here */
}

@PostMapping("/all")
public ResponseEntity<List<FaultDTO>> saveAll(@RequestBody ArrayList<FaultDTO> list){
    /* your code here */
}
@PostMapping
公共响应权限保存(@RequestBody FaultDTO到FaultDTO){
/*你的代码在这里*/
}
@后映射(“/全部”)
公共响应属性saveAll(@RequestBody ArrayList列表){
/*你的代码在这里*/
}

不能将两个端点绑定到同一个URI和同一个方法,因为这样应用程序就不知道要使用哪个

您需要这样做:

@PostMapping
public ResponseEntity<FaultDTO> save(@RequestBody FaultDTO faultDTO){
   /* your code here */
}

@PostMapping("/all")
public ResponseEntity<List<FaultDTO>> saveAll(@RequestBody ArrayList<FaultDTO> list){
    /* your code here */
}
@PostMapping
公共响应权限保存(@RequestBody FaultDTO到FaultDTO){
/*你的代码在这里*/
}
@后映射(“/全部”)
公共响应属性saveAll(@RequestBody ArrayList列表){
/*你的代码在这里*/
}

您需要为这两个独立的方法指定两个独立的端点,以便将它们分隔开

    @PostMapping("/save")
    public ResponseEntity<FaultDTO> save(@RequestBody FaultDTO faultDTO){...}

 @PostMapping("/saveAll")
    public ResponseEntity<List<FaultDTO>> saveAll(@RequestBody ArrayList<FaultDTO> list){...}
@PostMapping(“/save”)
公共响应属性保存(@RequestBody FaultDTO FaultDTO){…}
@后映射(“/saveAll”)
公共响应属性saveAll(@RequestBody ArrayList){…}

在您的情况下,完整的URL路径将是,
/faults/save
/faults/saveAll

您需要为这两个单独的方法指定两个单独的端点,以便将它们分开

    @PostMapping("/save")
    public ResponseEntity<FaultDTO> save(@RequestBody FaultDTO faultDTO){...}

 @PostMapping("/saveAll")
    public ResponseEntity<List<FaultDTO>> saveAll(@RequestBody ArrayList<FaultDTO> list){...}
@PostMapping(“/save”)
公共响应属性保存(@RequestBody FaultDTO FaultDTO){…}
@后映射(“/saveAll”)
公共响应属性saveAll(@RequestBody ArrayList){…}

在您的情况下,完整的URL路径将是,
/faults/save
/faults/saveAll
这里的问题是,您需要为post映射提供某种实际值,因为它们位于同一控制器中,以便dispatcher servlet知道映射这些请求的位置

 @PostMapping("/save")
    public ResponseEntity<FaultDTO> save(@RequestBody FaultDTO faultDTO){...}

 @PostMapping("/saveAll")
    public ResponseEntity<List<FaultDTO>> saveAll(@RequestBody ArrayList<FaultDTO> list){...}
@PostMapping(“/save”)
公共响应属性保存(@RequestBody FaultDTO FaultDTO){…}
@后映射(“/saveAll”)
公共响应属性saveAll(@RequestBody ArrayList){…}

不过,这只是一个后续行动!我认为您可以简单地使用一个save方法来获取ArrayList,然后不管端点传递了一个错误还是多个错误,这都不会有多大区别,因为我假设saveAll方法多次都与save方法相同:)

这里的问题是,您需要给在它们位于同一控制器中时进行映射,以便DispatcherServlet知道映射这些请求的位置

 @PostMapping("/save")
    public ResponseEntity<FaultDTO> save(@RequestBody FaultDTO faultDTO){...}

 @PostMapping("/saveAll")
    public ResponseEntity<List<FaultDTO>> saveAll(@RequestBody ArrayList<FaultDTO> list){...}
@PostMapping(“/save”)
公共响应属性保存(@RequestBody FaultDTO FaultDTO){…}
@后映射(“/saveAll”)
公共响应属性saveAll(@RequestBody ArrayList){…}

不过,这只是一个后续行动!我认为您可以简单地使用一个save方法来获取ArrayList,然后不管端点是通过一个错误还是多个错误,都不会有太大的区别,因为我会多次假设saveAll方法与save方法相同:)

不是Spring REST方面的专家,但我假设控制器正在映射到某个错误URI(类似于/fault),您告诉它为FaultDTO和List处理POST/fault)。答案是更改第二个方法的URI,使它们具有不同的(例如,/faults而不是/fault)?像那样的东西。这是一个很好的方法吗?这可能会很有帮助。作为一个简单的解决方案,如果需要,您可以只使用第二种方法,只将一个DTO传递到列表中。我不是Spring REST方面的专家,但我假设控制器映射到某个URI(如/fault),并且您告诉它处理FaultDTO和list的POST/fault。答案是更改第二个方法的URI,使它们具有不同的(例如,/faults而不是/fault)?像那样的东西。这是一个很好的方法吗?这可能会很有帮助。作为一个简单的解决方案,您可以只使用第二种方法,如果需要,只将一个DTO传递到列表中。