springboot 1.3.5升级1.5.9后 默认使用tomcat 8.5版本 get请求报400 异常信息为 The valid characters are defined in RFC 72

Posted AnCan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springboot 1.3.5升级1.5.9后 默认使用tomcat 8.5版本 get请求报400 异常信息为 The valid characters are defined in RFC 72相关的知识,希望对你有一定的参考价值。

1.springboot 1.3.5升级1.5.9后 默认使用tomcat 8.5版本而之前用的是tomcat7    get请求报400 异常信息为 The valid characters are defined in RFC 7230 and RFC 3986

 

2.注意这里说明了,只是get请求。post的请求没问题

-------解决办法

将get请求的参数urlencode一下 

      

param = encodeURIComponent(param);

 

PS:

1.RFC3986文档规定,Url中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符以及所有保留字符。

2.tomcat 8.0对URL做出了一些更严格的限制

 所以,很多get请求包含了特殊字符(请求数据格式定义的是json的(contentype/json)) 在低版本的容器是可以的且后台能够自动识别解析url的json格式数据,

      但是到了8.0及以上版本的tomcat容器后就不行了。

-----很多人尝试给tomcat降级,因为很多从jdk7升到jdk8的朋友,会为了容器校验严格的这个问题考虑使用低版本不报错的容器(8.0.2-8.0.3好像是可以)。

      但这个我认为也不是最终解决办法,两个原因:1.服务容器很难避免为了适应快速的技术发展而进行升级,只是时间问题 且进行转码也对明文信息起到了保护作用。

                                                                                  2.现在容器的api和spring的api都是自动对url进行decode,所以不用担心还要向以前一样修改后台代码.z这一点很赞。

 

------我也参考了如下朋友的帖子

http://blog.csdn.net/vickyway/article/details/46375971

以上是关于springboot 1.3.5升级1.5.9后 默认使用tomcat 8.5版本 get请求报400 异常信息为 The valid characters are defined in RFC 72的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot 升级后 Jackson 序列化不起作用

Java Array和大数据运算

使用 Spring boot 1.5.9 验证 solr/postgresql 数据库的兼容性版本

java-Arrays类

列表操作

将 Spring Cloud 版本从 Edgware 升级到 Hoxton