在URL Spring REST Web请求中包含URL作为参数

时间:2011-08-10 09:55:33

标签: java spring url rest

我有一个REST Web服务,我想将URL作为参数

有些事情:

Example call: http://myserver.com/myService/http://www.website.com/files/myfile.docx

原始服务器映射是:

 @RequestMapping(value="/myService/{url}", method=RequestMethod.GET)

显然,使用任何带有“/”的URL调用此方法会中断映射到Web服务。

我尝试在映射

中使用正则表达式来表示URL
@RequestMapping( value="/getBase64/<\\b(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]>", method=RequestMethod.GET )

但这似乎也没有用。

@RequestMapping是否支持这样的正则表达式,或者我只是将参数中的“\”替换为另一个符号,然后在服务器上转换回来?

1 个答案:

答案 0 :(得分:0)

http://myserver.com/myService/http://www.website.com/files/myfile.docx

这不是符合RFC的URL,所以我不指望它能够正常工作。 你应该发送一个站点的ID(这是真正的宁静方式)。我认为,如果你想发送URL作为字符串参数(也许你可以发送哈希码?),唯一的方法就是没有http:// scheme和escape斜杠(不确定它是否可行)。

然而,最好的办法是,如果您必须发送并以您提到的形式(http://website.com/blablabla)发送URL,则将POST请求和您的参数作为表格参数发送(与标准HTTP表单的情况相同)。

import javax.ws.rs.POST;
import javax.ws.rs.FormParam;
import javax.ws.rs.Path;

// (...)

    @POST
    @Path("/myservice/")
    public Response myService(@FormParam("url") final String url) {
      LOG.debug(String.format("Received URL: %s", url));
    }