关于tomcat8.5以上版本后端接收数组或Json报错的问题
题记:
由于业务需要接收前段传递的数组 后端对数组进行批量操作 但是项目中的tomcat版本是9.0以上的导致了 这个错误
Note: further occurrences of HTTP request parsing errors will be logged at DEBUG level.
java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
前端传递的一组数组 例如var ids = ["0x9999","1x457887","2d4873"]
后台通过@RequestParam(value = 'ids')进行获取
按照常理是应该可以接收的到的但是由于tomcat8.5以上的版本 新特性 严格按照RFC3986规范进行访问解析
RFC3986规范定义了Url中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符
以及所有保留字符(RFC3986中指定了以下字符为保留字符:!*’();:@&=+$,/?#[])
所以导致JSON,数组等数据无法接收
解决方案:
1.不传特殊字符 (这个不太可能)
2.降低tomcat版本 (不理想因为总要用到高版本)
3.在 conf/catalina.properties 中最后添加一行:
org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true (推荐)
4.配置TomcatConfig文件 (推荐)