如何将URL作为路径参数传递?在JAX-RS @Path中

时间:2015-09-13 03:13:07

标签: java spring rest jersey jax-rs

http://localhost:8181/RESTfulExample/entityid/https://www.youtube.com

@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();

}

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

1 个答案:

答案 0 :(得分:1)

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

现在,技术上,您可以通过使用percent encoding对所有特殊字符进行编码来传递URL作为路径参数,但我不推荐它。< / p>

我们说您的应用程序位于https://example.net/otherapp/,然后合并后的网址为:

https://example.net/otherapp/entityid/https%3A%2F%2Fexample.com%2Fmyapp%2Fentityid%2F123

正则表达式将与未编码的值匹配,因此可能有效:

{entityid : https?://.*}

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