1

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

@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=当前月份:Y07606 当前月份:Y07608 无效

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

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

4

3 回答 3

0

我建议将此正则表达式添加到您的代码中以处理 '+' char :

@GetMapping(value = "/validate")
    private void validateExpression(@RequestParam(value = "expression:.+") String expression) {
        System.out.println(expression);
        // code to validate the input string
    }
于 2021-05-03T09:04:52.540 回答
0

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

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

于 2021-05-03T09:37:23.027 回答
0

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

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

于 2021-05-03T09:56:40.663 回答