我有一个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是否支持这样的正则表达式,或者我只是将参数中的“\”替换为另一个符号,然后在服务器上转换回来?
答案 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));
}