代码没有变化,只是我在使用8.0.50的新环境中安装了使用tomcat 8.0.23开发的应用程序(struts2)。 问题是从客户端(javascript)向服务器(java)发送一个简短的json。 在以前的版本中,我使用的是这样的URL:
http://127.0.0.1:10080/dlq/updprat?jsonparams={%22datavz%22:%2209/04/2018%2014:18:12%22,%22descavz%22:%22foo%20foo%22,%22idprat%22:32,%22codprat%22:%22123456%22,...etc...,costs%22:[]}&pratAffidateSearchType=a
一切都运行正常 现在系统返回以下错误:
org.apache.coyote.http11.AbstractHttp11Processor.process解析错误 HTTP请求标头 java.lang.IllegalArgumentException:找到无效的字符 请求目标。有效字符在RFC 7230和RFC中定义 3986
我将错误定位在大括号中:不再接受这些错误!
我该如何解决这个问题呢?
该应用程序不使用ajax框架(如jQuery或Dojo),我不想现在插入大量的库,只是一次,为了一个简单的用途。
是否有一个计划javascript解决方案更优雅,通用和可导出而不是用另一个字符替换原点的大括号并在解析之前将其替换为目的地?
答案 0 :(得分:0)
{
符号应替换为%7B
,}
替换为%7D
。
最简单的方法是做一些事情:
window.encodeURIComponent(JSON.stringify({
"datavz":"09/04/2018 14:18:12",
"descavz":"foo foo",
"idprat":32,
"codprat":"123456",
"costs":[]
}));
// %7B%22datavz%22%3A%2209%2F04%2F2018%2014%3A18%3A12%22%2C%22descavz%22%3A%22foo%20foo%22%2C%22idprat%22%3A32%2C%22codprat%22%3A%22123456%22%2C%22costs%22%3A%5B%5D%7D
在解析之前,您不需要在目的地替换它,因为它应该在URL编码时自动完成,并且来自URL。