Dynami c @RequestParam в @RestController - PullRequest
       25

Dynami c @RequestParam в @RestController

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

У меня есть контроллер:

@RestController
@RequestMapping(value = UserRestController.REST_URL, produces = 
MediaType.APPLICATION_JSON_VALUE)
public class UserRestController {

static final String REST_URL = "/customers";

@GetMapping
public List<User> getAll() {
    return service.getAll();
  }
}

Он успешно обрабатывает такие запросы, как:

GET:    /customers/

И я хочу получать пользователей по некоторым параметрам. Например, электронная почта:

GET:   /customers?email=someemail@gmail.

Я пытался:

@GetMapping("/")
public User getByEmail(@RequestParam(value = "email") String email) {
    return super.getByEmail(email);
}

и, как ожидается, я получаю исключение, так как "/" уже сопоставлен с getAll-классом. Есть ли способы решить эту проблему?

Ответы [ 2 ]

2 голосов
/ 19 февраля 2020

Вам необходимо изменить текущий метод

@GetMapping
public List<User> getAll() {
    return service.getAll();
  }
}

и добавить email в качестве параметра запроса, если вы хотите сохранить сопоставление URL-адреса одинаковым. Так это будет выглядеть:

@GetMapping
public List<User> getAll(@RequestParam(value = "email", required = false) String email) {
    if (!StringUtils.isempty(email)) {
        return super.getByEmail(email);
    } else {
        return service.getAll();
    }
}
2 голосов
/ 19 февраля 2020
@GetMapping
public Object get((@RequestParam(value = "email", required = false) String email) {
    if (email != null && !email.isEmpty()) { 
     return super.getByEmail(email);
    } else {
      return service.getAll();
    }  
}
...