Два метода post получают ошибку отображения неоднозначностей - PullRequest
1 голос
/ 08 февраля 2020

Я объявляю два метода сообщения. Один для сохранения одного объекта и другой для сохранения списка. Теперь вопрос в том, какой путь я должен дать каждому, чтобы не получить типичную ошибку:

Причина: java .lang.IllegalStateException: Неоднозначное отображение. Невозможно отобразить Мой контроллер имеет следующий URL, например / faults

Это мои методы:

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

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

Как правильно написать этот API?

Ответы [ 3 ]

0 голосов
/ 08 февраля 2020

Вам необходимо дать двум отдельным методам две отдельные конечные точки для их разделения.

    @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

0 голосов
/ 09 февраля 2020

Проблема здесь в том, что вам нужно будет дать какое-то фактическое значение для пост-отображения, так как они находятся в одном контроллере, чтобы сервлет-диспетчер знал, где отобразить эти запросы.

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

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

Просто следите за этим, однако! Я думаю, что вы могли бы просто иметь один метод сохранения, который принимает ArrayList, и затем, передается ли конечной точке один сбой или много сбоев, это не должно иметь большого значения, так как я бы предположил, что метод saveAll делает то же самое, что и метод сохранения, только много раз. :)

0 голосов
/ 08 февраля 2020

Вы не можете иметь две конечные точки, связанные с одним и тем же 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 */
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...