【问题标题】:Two post methods get ambiguos mapping error两个 post 方法得到歧义映射错误
【发布时间】:2020-05-24 11:00:44
【问题描述】:

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

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

这些是我的方法:

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

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

这个api的正确写法是什么?

【问题讨论】:

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

标签: java spring rest spring-boot api


【解决方案1】:

您不能将两个端点绑定到同一个 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 */
}

【讨论】:

    【解决方案2】:

    您需要为这两个单独的方法提供两个单独的端点以便隔离它们。

        @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

    【讨论】:

      【解决方案3】:

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

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

      不过,只是对此的跟进!我认为您可以简单地拥有一个采用 ArrayList 的保存方法,然后无论端点是通过一个故障还是多个故障,它都不应该有太大的区别,因为我假设 saveAll 方法与保存方法只是多次执行相同的操作:)

      【讨论】:

        猜你喜欢
        • 2020-11-21
        • 1970-01-01
        • 1970-01-01
        • 2018-07-09
        • 1970-01-01
        • 2012-07-17
        • 1970-01-01
        • 2013-04-03
        • 1970-01-01
        相关资源
        最近更新 更多