Выбор конечной точки API REST в Spring Boot

Учитывая контроллер, как это:

   @RestController
   @RequestMapping("/cars") {
   public class CarController{

   @RequestMapping(method = RequestMethod.GET)
   public ResponseEntity<List<Cars>> getCars() { //logic }

   @RequestMapping(method = RequestMethod.GET")
   public ResponseEntity<List<Cars>> searchCar(@RequestParam("name") String name, @RequestParam("value") String value) { //logic}
  }

Если URL-адрес похож на этот localhost / cars, я хотел бы получить доступ к методу getCars().

Но если URL-адрес: localhost/cars? Имя = что-то и значение =100 или

localhost / cars? name = что-то или

локальный / машины? значение =100

Я хотел бы, чтобы второй метод был доступен.

Возможно ли это сделать?

2 ответа

Решение

Вы все еще запрашиваете тот же список ресурсов, машин, только вы добавляете фильтр или критерии поиска / запроса.

Было бы полезно разработать фильтр / критерии запроса для поддержки чего-то вроде:

/cars?q=make+eq+acura (meaning make=acura)
/cars?q=price+lt+25000  (meaning price <25000)

и так далее.

Нет, это невозможно. потому что, когда запрос поступает в контейнер, он сначала сканирует все URL и проверяет уникальность URL. Если присутствует повторяющийся URL-адрес, то контейнер выдаст исключение.

В вашем случае вы используете сопоставление URL на уровне класса, но не используете сопоставление URL на уровне метода.

Чтобы получить доступ к вашему getCars() метод, вам нужно использовать какой-то URL, как показано ниже

@RequestMapping(value = "/", method = RequestMethod.GET)

Для доступа ко второму способу вам нужно использовать другой URL-адрес сопоставления

@RequestMapping(values="/test", method = RequestMethod.GET")

Вы не можете получить доступ

localhost/cars?name=something&value=100 or

localhost/cars?name=something or

localhost/cars?value=100

так как вы используете 2 параметра, как @RequestParam("name") String name, @RequestParam("value") String valueвам нужно передать два параметра в вашем URL, как показано ниже

localhost/cars/test?name=something&value=100

если вы не хотите передавать какой-либо из двух параметров, просто передайте его как null и проверьте это внутри вашего метода

Другие вопросы по тегам