如何将 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

如何获取邮递员环境和邮递员全局 URL 以传递给纽曼?

如何将文件名作为类变量传递?

XQUERY SQL - 如何将单个节点元素作为变量传递?

在 JavaScript 中将多个数组值作为 url 变量传递

如何使用 include 函数通过 URL 将变量/值传递给另一个 PHP 文件(通过 HTTP)? (PHP)