Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带有特殊字符的RequestParam'+';_Java_Rest_Spring Boot_Special Characters - Fatal编程技术网

Java 带有特殊字符的RequestParam'+';

Java 带有特殊字符的RequestParam'+';,java,rest,spring-boot,special-characters,Java,Rest,Spring Boot,Special Characters,在我的控制器中,我有带有4个请求参数的requestMapping“searchUser”。 对于请求参数“phoneNumber”,我还接受特殊字符,如“(”、“)”、“-”和“+” 除了字符“+”之外,所有字符都显示在我的日志中。例如,如果我发送像“+123”或“123+1”这样的值,我将得到我的控制器“123”和“123 1” 它将“+”替换为空格 它只发生在“+”上 @RequestMapping(method = RequestMethod.GET, value = "/search"

在我的控制器中,我有带有4个请求参数的requestMapping“searchUser”。 对于请求参数“phoneNumber”,我还接受特殊字符,如“(”、“)”、“-”和“+”

除了字符“+”之外,所有字符都显示在我的日志中。例如,如果我发送像“+123”或“123+1”这样的值,我将得到我的控制器“123”和“123 1” 它将“+”替换为空格

它只发生在“+”上

@RequestMapping(method = RequestMethod.GET, value = "/search", produces = "application/json")
    public List<User> getWebUserProfiles(HttpServletRequest request, HttpServletResponse response,
        @RequestParam("firstName") String firstName, @RequestParam("lastName") String lastName,
        @RequestParam("email") String email
        @RequestParam("phoneNumber") String phoneNumber);
好的,我解决了

我把它编码在我的前面。没有其他选择

params.set('phoneNumber',encodeURIComponent(searchParams.phoneNumber))


谢谢你的帮助

您只需在javascript端用“%2B”替换“+”的任何实例,然后再将其发送到服务器


这是因为
+
是URL中的一个特殊字符。尝试将其作为
%2C
发送到您的Web服务器。这是正常的。请参阅HTML规范的一节。您如何调用URL?如果从浏览器中的HTML表单调用,
+
应自动进行百分比转义。@f1sh-%2C是逗号,%2B是加号。为了给您的评论添加更多内容,plus被视为空间的URL转义。做这件事的几种方法之一。陷阱再多看看URL编码。@Quintium你是对的。显然很难读取ascii表:D@VGR . 我在有角度的前端调用它。请参阅更新您应该确保前端URI对所有字段进行编码。要么单独编写代码,要么确保您的框架能够处理它。否则,用户将获得惊喜,例如,如果他们将
&
放入文本字段中。它看起来不正确。默认情况下,它已经在进行编码了。所以,很明显,有别的东西做错了——可能是服务器端对它进行了两次解码或者其他什么。尝试查看原始流量,找出哪里有“+”或“.”。谢谢你的建议。@kan真的吗?在我的情况下,它实际上没有做到这一点。在我的spring boot后端,我对所有东西进行编码,并将其交给下一个控制器。我还尝试设置内容类型:“application/x-www-form-urlencoded”。但是它不起作用,我打赌spring boot已经在幕后完成了所有的编码/解码魔术。您在spring boot中到底编码了什么?为什么?
   search(searchParams: any){
        let params = new URLSearchParams();
        params.set('firstName', searchParams.firstName);
        params.set('lastName', searchParams.lastName);
        params.set('email', searchParams.email);
        params.set('phoneNumber', searchParams.phoneNumber);

        return this._http.get(this.baseURL+'search', 
                        { search:params })
                        .map(response => response.json())
                        .catch(this.handleError);
    }