Использование параметров в GetMapping в Spring приводит к неоднозначному методу обработчика для нескольких параметров - PullRequest
0 голосов
/ 11 июля 2020

У меня есть следующие конечные точки REST в Spring boot

@GetMapping(value = "students", params = {"name"})
public ResponseEntity<?> getByName(@RequestParam final String name) {
    return new ResponseEntity<>(true, HttpStatus.OK);
}

@GetMapping(value = "students", params = {"tag"})
public ResponseEntity<?> getByTag(@RequestParam final String tag) {
    return new ResponseEntity<>(true, HttpStatus.OK);
}

Вышеуказанные обработчики отлично работают для следующих запросов:

localhost:8080/test/students?name="Aron"

localhost:8080/test/students?tag="player"

Однако всякий раз, когда я пробую следующее:

localhost:8060/test/students?name="Aron"&tag="player"

, он выдает java.lang.IllegalStateException: Ambiguous handler methods mapped и отвечает HTTP 500

Как я могу изменить это поведение? Я хочу, чтобы мое приложение отвечало только тогда, когда я получаю параметр запроса tag или параметр запроса name. Во всем остальном я хочу, чтобы он игнорировал , даже если это комбинация двух параметров.

Почему здесь возникает неоднозначная ошибка и как мы можем с этим справиться?

1 Ответ

1 голос
/ 12 июля 2020

Вы можете использовать @RequestParam(required = false):

    @GetMapping(value = "students")
    public ResponseEntity<?> get(
        @RequestParam(required = false) final String name,
        @RequestParam(required = false) final String tag) {

        if ((name == null) == (tag == null)) {
            return new ResponseEntity<>(false, HttpStatus.BAD_REQUEST);
        }
        return new ResponseEntity<>(true, HttpStatus.OK);
    }
...