Url как параметр пути в restful api вызывает неверный запрос

#rest #jersey #jax-rs #tomcat5.5

#rest #джерси #джакс-рс #tomcat5.5

Вопрос:

Мы разрабатываем restful api с использованием jersey (1.9.1) и tomcat 5.5. Данный ресурс идентифицируется с urn, и мы хотели бы обратиться к конкретному экземпляру этого ресурса. Для достижения этой цели мы использовали следующий код:

 @Path("/XXXs")
public interface XXXResource {
    @GET
    @Path("{id}")
    @Produces({ MediaType.APPLICATION_JSON })
    XXXInfo getXXX(@PathParam("id") String id);
}
 

Идея состоит в том, чтобы обратиться к этому ресурсу, используя следующий URL:

http://localhost:8080/restapi/XXXs/http://ns.something.com/XXX/2

Значение параметра декодированного пути должно быть: http://ns.something.com/XXX/2

Однако, когда я делаю запрос, используя закодированный URL, я получаю сообщение о неправильном запросе от tomcat. Итак, мои вопросы:

  • Правильно ли использовать Urn в качестве параметра пути?
  • Почему tomcat рассматривает этот запрос как неверный запрос?

На всякий случай я изменил сигнатуру метода, чтобы параметр брался из строки запроса, и он работал нормально, но я хочу, чтобы параметр был частью пути.

Спасибо.

Ответ №1:

Хорошо, я решил это, добавив следующую строку в catalina.properties:

org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true