Java 如何在JAX-RS@path中以路径参数的形式传递url

Java 如何在JAX-RS@path中以路径参数的形式传递url,java,spring,rest,jersey,jax-rs,Java,Spring,Rest,Jersey,Jax Rs,如何修改正则表达式以接受其中的url?或者任何其他替代解决方案来获取entityid,该ID是URL?您不应该将URL作为路径参数传递。实体id是一个常规标识符(整数、GUID,…),在这种情况下,它可以像您拥有的那样位于路径中,或者它是一个URL,在这种情况下,URL将是https://example.com/myapp/entityid/123,您又回到了实体id URL的实体id部分,它只是一个常规标识符 现在,从技术上讲,您可以通过使用对所有特殊字符进行编码来将URL作为路径参数传递,但


如何修改正则表达式以接受其中的url?或者任何其他替代解决方案来获取entityid,该ID是URL?

您不应该将URL作为路径参数传递。实体id是一个常规标识符(整数、GUID,…),在这种情况下,它可以像您拥有的那样位于路径中,或者它是一个URL,在这种情况下,URL将是
https://example.com/myapp/entityid/123
,您又回到了实体id URL的实体id部分,它只是一个常规标识符

现在,从技术上讲,您可以通过使用对所有特殊字符进行编码来将URL作为路径参数传递,但我不推荐这样做

假设您的应用程序位于
https://example.net/otherapp/
,则组合的url为:

https://example.net/otherapp/entityid/https%3A%2F%2Fexample.com%2Fmyapp%2Fentityid%2F123
正则表达式将与未编码的值匹配,因此这可能会起作用:

{entityid:https?://.}

注意:必须对所有值进行路径段编码,而不仅仅是URL值。整数是安全的,但几乎所有其他值都必须进行编码。

这不是有效的URL。如果我们试图传递entityid=,这是有效的URL。
/
在路径段中是无效字符。即使您允许
,路径仍然会被解析为段:
RESTfulExample
entityid
https:
www.youtube.com
是的,您是正确的,这只是我试图解决的问题。如果我们通过,https:将被接受为一个值,因为在此“/”之后的任何内容都将被视为另一个值。创建该URL的人没有对路径段进行编码。有关正确编码的示例,请参见我的答案。
@GET
@Path("/entityid/{entityid : [a-zA-Z][a-zA-Z_0-9]}")
public Response getUserByentityid(@PathParam("entityid") String entityid) {

    return Response.status(200)
            .entity("getUserByentityid is called, username : " + entityid)
            .build();

}