restful api中Url作为路径参数导致错误请求



我们正在使用jersey(1.9.1)和tomcat 5.5开发一个restful api。一个给定的资源被标识为一个瓮,我们想要处理该资源的一个特定实例。为了实现这一点,我们使用了以下代码:

@Path("/XXXs")
public interface XXXResource {
    @GET
    @Path("{id}")
    @Produces({ MediaType.APPLICATION_JSON })
    XXXInfo getXXX(@PathParam("id") String id);
}
这个想法是使用以下url来寻址这个资源:

http://localhost: 8080/restapi/产品/http % 3 a % 2 f % 2 fns.something.com % 2 fxxx % 2 f2

解码后的路径参数值应为:http://ns.something.com/XXX/2

然而,当我使用编码的url发出请求时,我从tomcat得到一个错误的请求消息。所以我的问题是:

  • 使用Urn作为路径参数是否正确?
  • 为什么tomcat认为这个请求是坏请求?

为了以防万一,我更改了方法的签名,以便从查询字符串中获取参数,并且它工作得很好,但我希望参数成为路径的一部分。

谢谢。

好的,我通过在catalina.properties中添加以下行来解决这个问题:

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

最新更新