RESTful API 中的 URL 作为路径参数会导致错误的请求

发布于 2024-12-12 18:12:09 字数 835 浏览 1 评论 0原文

我们正在使用 jersey (1.9.1) 和 tomcat 5.5 开发一个 Restful api。 给定的资源由一个 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%3A%2F%2Fns.something.com%2FXXX%2F2

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

但是,当我使用编码后的 url 我从 tomcat 收到错误的请求消息。所以我的问题是:

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

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

谢谢。

We are developing a restful api using jersey (1.9.1) and tomcat 5.5.
A given resource is identified with a urn and we would like to address a specific instance of that resource. In order to achieve this, we used the following code:

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

The idea is to address this resource using the following url:

http://localhost:8080/restapi/XXXs/http%3A%2F%2Fns.something.com%2FXXX%2F2

The decoded path param value should be:
http://ns.something.com/XXX/2

However, when I make the request using the encoded url I get a bad request message from tomcat. So my questions are:

  • Is it correct to use a Urn as a path parameter?
  • Why is tomcat considering this request as a bad request?

Just in case, I changed the signature of the method so that the parameter is taken from the query string and it worked fine, but I want the parameter to be part of the path.

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

源来凯始玺欢你 2024-12-19 18:12:09

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

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

Ok, I solved it by adding the following line in catalina.properties:

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文