两种发布方法出现歧义映射错误



我声明了两个发布方法。一个用于保存一个对象,另一个用于保存列表。现在的问题是我应该给每个人提供什么路径,以免出现典型错误:

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

这些是我的方法:

@PostMapping
public ResponseEntity<FaultDTO> save(@RequestBody FaultDTO faultDTO){...}
@PostMapping
public ResponseEntity<List<FaultDTO>> saveAll(@RequestBody ArrayList<FaultDTO> list){...}

编写此 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("/save")
public ResponseEntity<FaultDTO> save(@RequestBody FaultDTO faultDTO){...}
@PostMapping("/saveAll")
public ResponseEntity<List<FaultDTO>> saveAll(@RequestBody ArrayList<FaultDTO> list){...}

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

这里的问题是,当它们位于同一个控制器中时,您需要为post映射提供某种实际值,以便调度程序servlet知道在哪里映射这些请求。

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

然而,这只是一个后续!我认为您可以简单地使用一种采用 ArrayList 的保存方法,然后无论端点传递一个错误还是多个错误,它都应该没有太大区别,因为我假设 saveAll 方法与保存方法相同,只是很多次:)