Неоднозначное картографирование.Невозможно отобразить метод Spring Boot - PullRequest
0 голосов
/ 02 марта 2019

У меня проблема с соответствующим отображением на конечные точки.Я хочу получить такой результат:

  • Когда я иду на /api/leagues/1 показывать лигу с id = 1,
  • Когда я иду на /api/leagues/spain Показывать лигу с страной = "Испания ",
  • Когда я иду на /api/leagues/la liga Показать лигу с leagueName =" la liga "

мой код такой:

@RestController
@RequestMapping("/api/leagues")
public class LeagueController {

    @Autowired
    private LeagueService leagueService;

    @GetMapping("")
    public List<League> getLeagues() {
        return leagueService.getAllLeagues();
    }

    @GetMapping("/{id}")
    public League getLeagueById(@PathVariable Long id) {
        return leagueService.getLeagueById(id);
    }

    @GetMapping("/")
    public League getLeagueByCountry(@RequestParam(value="country") String country) {
        return leagueService.getLeagueByCountry(country);
    }

    @GetMapping("/")
    public League getLeagueByLeagueName(@RequestParam(value="leagueName") String leagueName) {
        return leagueService.getLeagueByLeagueName(leagueName);
    }


}

Однакопри запуске я получаю следующее сообщение об ошибке:

Ambiguous mapping. Cannot map 'leagueController' method` 

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

@RestController
@RequestMapping("/api/leagues")
public class LeagueController {

    @Autowired
    private LeagueService leagueService;

    @GetMapping("")
    public List<League> getLeagues() {
        return leagueService.getAllLeagues();
    }

    @GetMapping("/{id}")
    public League getLeagueById(@PathVariable Long id) {
        return leagueService.getLeagueById(id);
    }

    @GetMapping("/")
    public League getLeagueByCountry(@RequestParam(value="country") String country) {
        return leagueService.getLeagueByCountry(country);
    }

}

Это работает, но тогда я должен использовать следующую конечную точку:

/api/leagues?country=spain

Но я предпочитаю иметь эту конечную точку вместо:

/api/leagues/spain

Может кто-нибудь объяснить мне, как я могу решить проблему или помочь мне найти решение для отображения, которое я хочу?Я буду благодарен за это.

1 Ответ

0 голосов
/ 02 марта 2019

Ошибка довольно очевидна в соответствии с вашими экспериментами.
Вы не можете иметь более одного @GetMapping("...") с одним и тем же путем независимо от сигнатуры метода.
Пока этот код компилируется, его недостаточно во время выполнениядля весны:

@GetMapping("/")
public League getLeagueByCountry(@RequestParam(value="country") String country) {
    return leagueService.getLeagueByCountry(country);
}

@GetMapping("/")
public League getLeagueByLeagueName(@RequestParam(value="leagueName") String leagueName) {
    return leagueService.getLeagueByLeagueName(leagueName);
}

не так, как я хочу:

/api/leagues/spain

Чтобы получить такое отображение, где я полагаюИспания является страной среди прочих: информация о стране должна быть указана как @PathVariable параметр:

@GetMapping("/{country}")
public League getLeagueByCountry(@PathVariable String country) {
    return leagueService.getLeagueByCountry(country);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...