前端用get或者post请求方式请求后端数据交互,由于后台开始没有成功接收到数据,于是我把请求的数据类型改为json类型数据,结果

浏览器控制台报错为 400错误:

后台报错为:Note: further occurrences of HTTP request parsing errors will be logged at DEBUG level.
java.lang.IllegalArgumentException: Invalid character found in the request target [/test1?0=[%7B%22address%22:%22%E4%B8%8A%E6%B5%B7%E5%B8%82%E6%99%AE%E8%B7%AF+1518+%E5%BC%84%22%7D,%7B%22address%22:%22%E4%B8%8A%E6%B5%B7%E5%B8%82%E6%99%AE%E9%99%80%E5%8C%BA%E9%87%91%E6%B2%99%E6%B1%9F%E8%B7%AF+%22%7D] ]. The valid characters are defined in RFC 7230 and RFC 3986
    at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:494)
    

后台报错“Invalid character found in the request target”翻译下,就是请求目标中发现无效字符,在RFC 7230 and RFC 3986中定义了{}和一些其他字符是不在保留字段中的,需要转义,如‘{’需要转义成%7B,‘}’要转义成%7D。

 我的解决方案是:弃用这种方法,

浏览器打印数据,打印的语句:console.info(this.submitData)

发现是个数组,需要的数据在0:的下面

于是使用下标,如:this.submitData[0],成功解决。

后台获得了数据:

追加:上述可以解决一次传入一行数据,一次传入多行,也只有一行数据能被接收。

显然,这不是我要的,又捣鼓了两小时,终于解决一些问题。

解释:json有两种形式,json数组和json对象,而之前一直使用json数组发送,报错400

或者415,调试不报错时后端也接收不到数据。

暂时解决:把json数组改成json对象,就可以了。例如:{list:data}

这里的data是json数组,而这个整体是json对象。

后台接收到数据:

菜鸟一枚,还望大神赐教 

Logo

基于 Vue 的企业级 UI 组件库和中后台系统解决方案,为数万开发者服务。

更多推荐