【问题标题】:How to Pass URL as Path Variable如何将 URL 作为路径变量传递
【发布时间】: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 并在服务器端对其进行解码。

标签: java spring-boot


【解决方案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】:

    正斜杠是你的问题。

    你有几个选择。

    1. 使用 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;
      }
      
    2. 使用查询(请求)参数,您的 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;
      }
      
    3. 对 URL 中的斜线进行编码:

      localhost:8080/addAddress/http:%2F%2Fsamplewebsite.com"
      

      并配置 Tomcat 或 Jetty,无论您使用什么来允许编码斜线。这是Tomcat中的一个例子

    【讨论】:

      【解决方案3】:

      您可以使用 SafeUrl 解析路径中的 URL。

      一些文档:

      https://www.urlencoder.io/java/

      它可以让你通过url安全地传递参数,你可以在你需要的地方解码。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-12-18
        • 1970-01-01
        • 1970-01-01
        • 2021-09-14
        • 1970-01-01
        • 2015-12-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多