#java #api #jax-rs
Вопрос:
Итак, в моем классе ресурсов у меня есть следующее:
@GET
@Produces(MediaType.APPLICATION_JSON)
public List<Carta> get() {
return repositorio.getAll();
}
@GET
@Path("{id}")
@Produces(MediaType.APPLICATION_JSON)
public Carta getById(@PathParam("id") int id) {
return repositorio.getID(id);
}
оба работают, один-общий get (получит все), а другой-по идентификатору. Мне нужно добавить третью строку get by, но я не справляюсь с @params. Мне нужно добавить это в класс ресурсов:
@GET
@Path("{nome}")
@Produces(MediaType.APPLICATION_JSON)
public List<Carta> getNome(@PathParam("nome") String nome) {
return repositorio.getString(nome);
}
если я прокомментирую строки GetById, моя getByString работает, код хороший, мне просто нужно, чтобы обе функции выполнялись одновременно, если он получает номер, он ищет идентификатор, если это строка, он просматривает имя и описание. Кроме того, мне интересно, лучше ли использовать код для создания большего количества конечных точек? Как /поиск/по идентификатору/xx и /поиск/по имени/xxx вместо общего /поиск/xxx? Спасибо.
Комментарии:
1. Вы можете использовать регулярное выражение для различения параметров целочисленного и строкового пути. Что-то вроде
@Path("{id : \d }")
для целого числа. Вы можете прочитать больше о приоритете URI для ссылки JAX-RS
Ответ №1:
Вместо того, чтобы создавать другую конечную точку, вам следует расширить List<Carta> get()
поддержку фильтрации по имени карты.
Ожидаемый способ сделать это-использовать @QueryParam
аннотацию следующим образом:
@GET
@Produces(MediaType.APPLICATION_JSON)
public List<Carta> get(@QueryParam("name") String name) {
return repositorio.getCartas(name);
}
В случае null
параметра name Carta
будут возвращены все экземпляры.