Java 通过AJAX重读问题发布JSON

Java 通过AJAX重读问题发布JSON,java,javascript,ajax,Java,Javascript,Ajax,我在通过AJAX发布JSON时遇到了麻烦 出于测试目的,下面的代码再现了这个问题,并且是在Firefox Scratchpad中创建的(我在应用层使用主干): var xhr=new-XMLHttpRequest(); xhr.open(“POST”,“/my/api/url”);//也可以放 setRequestHeader(“内容类型”、“应用程序/json”); send(JSON.stringify({test:“}”); 事实上,无论我在JSON中使用什么重音字符串,它总是被错误地发

我在通过AJAX发布JSON时遇到了麻烦

出于测试目的,下面的代码再现了这个问题,并且是在Firefox Scratchpad中创建的(我在应用层使用主干):

var xhr=new-XMLHttpRequest();
xhr.open(“POST”,“/my/api/url”);//也可以放
setRequestHeader(“内容类型”、“应用程序/json”);
send(JSON.stringify({test:“}”);
事实上,无论我在JSON中使用什么重音字符串,它总是被错误地发送(我在Firefox和Chrome中进行了测试,这两个版本都是最新的)-我可以在Chrome DevTools/Firebug中看到错误的请求数据。在这种情况下发送的是
é

我在Java中找到了一个解决方法。我不想麻烦使用它一两次,但是,似乎情况并非如此。还有很多事情要做。
解决方法如下:

test=新字符串(test.getBytes(“ISO-8859-1”),“UTF-8”);
任何进一步的帮助都将不胜感激

我的设置(如果有人需要):

  • Windows 7 x64
  • JDK 1.7 x64
  • JBoss4.2.3
  • 放松
  • 髓鞘9.1

每当这个问题出现时,我都会用有趣的数据更新它们。

您没有正确地传递json

xhr.send(JSON.stringify({test:}))

此外,还应该有这样的密钥的QOUTE
{“test”:“e”}

可以使用变量

var jsonStr={ "test": "é" };
xhr.send(JSON.stringify(jsonStr));
我认为您不需要对json进行字符串化,因为您已经将Content Type设置为json,但对此并不确定

希望它能帮助你

尝试以这种方式发送参数

var params='json='+jsonStr;
xhr.send(params);

我已经解决了自己的问题。当我使用RESTEasy时,我的一个方法是使用拦截器
MessageBodyReader
。在这节课上,我没有使用请求的编码来读取正文

是:

成为:

String body = new String(IOUtils.toByteArray(inputStream), request.getCharacterEncoding());

你能给我们看一下给你的代码吗?JSON不关心字符编码,它只发送字节。我直接在Firefox Scratchpad中编写了该代码。您的IDE/编辑器有什么字符集?响应该请求的Web项目在UTF-8中。但是请求发送不正确,我可以在Firebug/DevTools中看到。抱歉,但没有帮助。一切正常,服务器正确解析了JSON。我可以调试它,看看会出现什么奇怪的字符。
String body = new String(IOUtils.toByteArray(inputStream), request.getCharacterEncoding());