springboot后台controller接收数组参数时的非法字符报错。

1.在开发过程中遇到了需要接收数组参数的问题,在网上找了许多方法还是报错非法字符的问题,恳请各位大佬解惑。

2.由于自己用是STS,内嵌tomcat9,已经尝试过了配置tomcat文件的方式

3.相关代码

(1)控制台错误报错
java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:479) ~[tomcat-embed-core-8.5.34.jar:8.5.34]

(2)postman输入的url
http://192.168.0.182:8088/Artilce/batchDelete?arrs[0]=1&arrs[1]=2

(3)controller方法
@RequestMapping(value="/batchDelete",method=RequestMethod.POST)
public boolean batchDelete(@RequestParam(value="arrs[]")Integer [] arrs) {                        
    for(int i=0;i<arrs.length;i++) {
        System.out.println(arrs[i].toString());
    }        
    return true;
}

4.恳请大佬们解惑

阅读 4.5k
2 个回答

数组的话,传同名参数就可以了,类似你说的这种形式:

@RequestParam(value="arrs[]")Integer [] arrs)

改成下面这种:

@RequestParam(value="arrs") Integer[] arrs)

传参数时写为:

arrs=1&arrs=2&arrs=3

问题原因:
这个问题是高版本tomcat中的新特性:就是严格按照 RFC 3986规范进行访问解析,而 RFC 3986规范定义了Url中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符以及所有保留字符(RFC3986中指定了以下字符为保留字符:! * ’ ( ) ; : @ & = + $ , / ? # [ ])

解决方案:
1,在conf/catalina.properties中,找到最后注释掉的一行 #tomcat.util.http.parser.HttpParser.requestTargetAllow=| ,改成tomcat.util.http.parser.HttpParser.requestTargetAllow=|[],表示把[]放行

2,不用这种方式传参,改用传统的参数拼接形式 a,b,c 服务器接受参数分割成数组

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题