如何将 URL 作为路径变量传递
Posted
技术标签:
【中文标题】如何将 URL 作为路径变量传递【英文标题】:How to Pass URL as Path Variable 【发布时间】:2019-12-04 07:59:07 【问题描述】:我试图将 URL 作为路径变量传递,但是当我输入 URL 作为参数并访问路由时,它会返回错误。我希望能够在地址作为参数传入路由后看到它。
@RequestMapping("/addAddress/address")
public String addAddress(@PathVariable("address") String address)
System.out.println("Address: "+address)
return address;
例如,如果我输入网址:
localhost:8080/addAddress/http://samplewebsite.com
我应该看看
http://samplewebsite.com
在后端打印出来。
【问题讨论】:
@weaver:这是一个“白标错误页面”。 您应该使用 UrlEncode 对“samplewebsite.com”进行编码。那是“http%3a%2f%2fsamplewebsite.com”。或者您可以将参数编码为 Base64 并在服务器端对其进行解码。 【参考方案1】:您可以执行以下操作;
@RequestMapping("/addAddress/**")
public String addAddress(HttpServletRequest request)
String fullUrl = request.getRequestURL().toString();
String url = fullUrl.split("/addAddress/")[1];
System.out.println(url);
return url;
使用 @PathVariable
是不可行的,因为 /
字符会破坏您正在寻找的行为,除非您进行编码/解码,但我觉得这对于端点的两个用户来说都是一种更简单的方法,和后端。
这也不会获取请求查询部分,例如
?input=user
, 为此,您可以添加this logic
【讨论】:
【参考方案2】:正斜杠是你的问题。
你有几个选择。
使用 2 个路径变量。这仍然适用于双正斜杠。这适用于 URL:“localhost:8080/addAddress/http://samplewebsite.com”
@GetMapping("/addAddress/schema/address")
public String addAddress(@PathVariable("schema") String schema, @PathVariable("address") String address)
System.out.println("Address: "+ schema + "//" + address);
return schema + "//" + address;
使用查询(请求)参数,您的 url 将是 URL:“localhost:8080/addAddress/?address=http://samplewebsite.com”
@GetMapping("/addAddress2")
public String addAddress2(@RequestParam("address") String address)
System.out.println("Address: "+address);
return address;
对 URL 中的斜线进行编码:
localhost:8080/addAddress/http:%2F%2Fsamplewebsite.com"
并配置 Tomcat 或 Jetty,无论您使用什么来允许编码斜线。这是Tomcat中的一个例子
【讨论】:
【参考方案3】:您可以使用 SafeUrl 解析路径中的 URL。
一些文档:
https://www.urlencoder.io/java/
它可以让你通过url安全地传递参数,你可以在你需要的地方解码。
【讨论】:
以上是关于如何将 URL 作为路径变量传递的主要内容,如果未能解决你的问题,请参考以下文章
如何将变量作为 cURL 数组中的 url 参数传递给 CURLOPT_URL