Java 两种post方法得到模糊映射错误
我声明了两个post方法。一个用于保存一个对象,另一个用于保存列表。现在的问题是,为了避免出现典型错误,我应该给每一个设置什么路径: 原因:java.lang.IllegalStateException:映射不明确。无法映射 我的控制器具有以下url,例如/faults 以下是我的方法: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
@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传递到列表中。