以后碰到项目中奇怪问题要进行记录啊,这就算是我记录的第一个问题。
首先这个项目工具是IDEA,环境技术是SpringBoot(SSM)项目

09:25:11.592 INFO  [nio-8802-exec-5] o.a.c.http11.Http11Processor - Error parsing HTTP request header
 Note: further occurrences of HTTP header 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

这个问题也不算难,网上有很多现成的解决方案,基本都是修改tomcat的配置,但我一个小组员不可能更改配置,只能再找解决方案。
但我这问题很奇怪,chrome不报错,只有使用IE(8-11)会报这个问题,才发现是字符转义的问题,英文数字没事,只有汉字会出问题。而问题出现的原因是将参数直接放在url进行传递
我们这边的烂代码是

 var url = '/noc/wtdj/saveOrEditWenTiDanJu'+
                    'isAdd=' + isAdd +
                    '&taxRate=' + taxRateVal +
                    '&moneyIncludeTax=' + moneyIncludeTaxVal +
                    '&goodsAmount=' + goodsAmountVal +
                    '&goodsMode=' + goodsModeVal +
                    '&goodsUnit=' + goodsUnitVal +
                    '&goodsName=' + goodsNameVal +
                    '&mainId=' + idVal +
                    '&userName=' + userNameVal +
                    '&userTaxNo=' + userTaxNoVal +
                    '&userAddr=' + userAddrVal +
                    '&userBankinfo=' + userBankinfoVal +
                    '&totalMoneyIncludeTax=' + totalMoneyIncludeTaxVal +
                    '&oldDataType=' + oldDataType;

本身这是一个表单,也不知道为什么不直接用表单提交,我也不能修改大结构,只能将传参数的方法改成

data:{
                        isAdd:1,
                        taxRate : $('#taxRate').val(),
                        moneyIncludeTax : $('#moneyIncludeTax').val(),
                        goodsAmount : $('#goodsAmount').val(),
                        goodsMode : $('#goodsMode').val(),
                        goodsUnit : $('#goodsUnit').val(),
                        goodsName : $('#goodsName').val(),
                        mainId : $('#id').val(),
                        userName : $('#userName').val(),
                        userTaxNo : $('#userTaxNo').val(),
                        userAddr : $('#userAddr').val(),
                        userBankinfo : $('#userBankinfo').val(),
                        oldDataType : $('#oldDataType').val(),
                        totalMoneyIncludeTax : $('#totalMoneyIncludeTax').val()
                    },

ajax中添加对象传参数,问题解决
不知有没有大神解释一下,在url中用?&传递参数和直接用data传对象的区别…
———————————————————————————————————————
经过进一步研究,发现高版本的tomcat会验证请求,简单的说参数里不能含有中文和一些特殊符号。chrome 和火狐会自动转码,但IE不会,所以可能只有IE会报这个异常,解决方法除了设置tomcat 外,最直观的方法就是将有可能不合法的参数进行转码
具体的方法:
前端页面

str = encodeURI(encodeURI(str))

后台controller
java.net.URLDecoder包(不需要引入),需要加异常处理或者抛出异常

		try {
            str = URLDecoder.decode(str,"utf-8");
        } catch (Exception e) {
            e.printStackTrace();
        }

这里由于本身有可能出现空指针异常,所以我没有把异常写的很详细,也没有把多个需要转码处理的放到同一个try中,不知道有没有大神提供更好的解决方式
另外需要注意的是加时间戳的时候,也要new Date().getTime()的方式加,不然直接new Date()会出现中文字符。
参考博文:
https://blog.csdn.net/fireofjava/article/details/80856887
https://www.cnblogs.com/lr393993507/p/7755867.html
https://www.cnblogs.com/wsygdb/p/7661220.html
完美!!!

Logo

一站式虚拟内容创作平台,激发创意,赋能创作,进入R空间,遇见同道,让优质作品闪耀发光。​

更多推荐