【问题标题】:How to make Get Request with Request param in Postman如何在 Postman 中使用请求参数发出获取请求
【发布时间】:2021-05-03 08:42:50
【问题描述】:

我创建了一个端点,它在其请求参数中接受一个字符串

@GetMapping(value = "/validate")
    private void validateExpression(@RequestParam(value = "expression") String expression) {
        System.out.println(expression);
        // code to validate the input string
    }

从邮递员发送请求时

https://localhost:8443/validate?expression=Y07607=Curr_month:Y07606/Curr_month:Y07608 

// 假设这是一个有效的输入 控制台显示为

Y07607=Curr_month:Y07606/Curr_month:Y07608 有效

但是当我发送时

https://localhost:8443/validate?expression=Y07607=Curr_month:Y07606+Curr_month:Y07608

//这也是一个有效的输入 控制台显示为

Y07607=Curr_month:Y07606 Curr_month:Y07608 无效

我不明白为什么不接受“+”作为参数。

"+" 会消失,直到它到达 api!为什么?

【问题讨论】:

    标签: spring-boot request-mapping http-request-parameters get-mapping


    【解决方案1】:

    我建议将此正则表达式添加到您的代码中以处理“+”字符:

    @GetMapping(value = "/validate")
        private void validateExpression(@RequestParam(value = "expression:.+") String expression) {
            System.out.println(expression);
            // code to validate the input string
        }
    

    【讨论】:

    • 对不起,它不起作用,而是抛出异常说明 [org.springframework.web.bind.MissingServletRequestParameterException: Required String parameter 'expression:.+' is not present]
    • 为什么不尝试像这样发送 RequestParam :"Curr_month:Y07606+Curr_month:Y07608",
    • 我必须验证整个表达式,即 LHS 和 RHS 两者。简单的事情是它用空格替换“+”,因为 + 是空格的 URL 转义!我仍然找不到从后端处理它的任何解决方案
    【解决方案2】:

    我没有找到任何解决方案,但原因是 + 是 URL 转义空格中的特殊字符。这就是为什么它将 + 替换为 " " 即空格。

    所以显然我必须从我的前端对其进行编码

    【讨论】:

      【解决方案3】:

      在 URL 中编码特殊字符是明智的。 \ 或 : 等字符。 对于+,格式或值为%2。您可以阅读更多有关 URL 编码的信息 here。这实际上是首选方法,因为这些特殊字符有时会导致意外事件发生,例如 / 或 =,这可能意味着 URL 中的其他内容。

      而且您不必担心在后端或服务器中手动对其进行解码,因为在大多数情况下和框架中它是自动解码的。在您的情况下,我假设您使用的是 Spring Boot,因此您无需担心解码。

      【讨论】:

        猜你喜欢
        • 2017-10-21
        • 2019-11-04
        • 1970-01-01
        • 1970-01-01
        • 2019-08-10
        • 1970-01-01
        • 2023-04-03
        • 1970-01-01
        • 2018-05-30
        相关资源
        最近更新 更多