Необязательный @PathParam в Jax-RS - PullRequest
37 голосов
/ 24 марта 2011

У меня есть служба, где последняя часть пути является необязательной, пользователь может ввести / mypath / и / mypath / param1 / .

Я пытался использовать регулярное выражение для фильтрации последней части пути:

@Path("/mypath{param1: (/param1)?}")

Я использую RestEasy в качестве поставщика JAX-RS, и код работает должным образом в Tomcat, но при развертывании его в JBoss я получаю код возврата 405, когда не отправляю необязательную часть.

Я что-то здесь не так делаю или это невозможно сделать портативным способом?

Ответы [ 4 ]

41 голосов
/ 29 марта 2011

Проблема заключалась в отсутствии пробела перед двоеточием:

@Path("/mypath{param1: (/param1)?}")

должно быть:

@Path("/mypath{param1 : (/param1)?}")

Видимо, это ошибка, потому что спецификация пробел вокруг двоеточия необязательный.Я также обнаружил, что я не первый укушенный этой ошибкой .

8 голосов
/ 24 октября 2013

В моем случае мне пришлось использовать это другое выражение:

@Path('/mypath/{param1 : (\\w+)?}')

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

1 голос
/ 28 марта 2011

Проверьте, есть ли уже определенный путь с / mypath, который принимает другой метод, это может быть причиной того, что вы получаете 405 (метод не разрешен). Также, когда у вас есть необязательные параметры, я думаю, лучше сделать их параметрами запроса.

0 голосов
/ 06 октября 2016

С Dropwizard 1.0 и Java8 вы можете использовать Необязательно

@Path("/news")
getLastNews(@QueryParam("topicId") String topicId, @QueryParam("limit") Optional<Integer> limit) 

Это даст ответ обоим

/news?topicId=123213?limit=200

и

/news?topicId=123213
...