【发布时间】:2015-09-11 11:04:03
【问题描述】:
我想在浏览器 Javascript (JS) 和我的 Java servlet 之间传输可能较大的嵌套 JSON。我能够将 JSON 从 Java 传递到 JS,但不能从 JS 传递到 Java servlet。我得到了错误:
Can not deserialize instance of java.util.LinkedHashMap out of START_ARRAY token
另外,我不确定我是否正确地从 Java 转到 JS。这是我的 JS 代码:
var xmlhttp;
if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
} else {// code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4 && xmlhttp.status==200) {
var response = JSON.parse(xmlhttp.responseText);
var x = 1;
}
}
xmlhttp.open("POST", 'http://localhost:8084/MyApp/JavaScriptInterface', true);
xmlhttp.setRequestHeader("Content-type","application/json");
xmlhttp.send({name: 'dog'});
这是我的 Java 代码:
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ObjectMapper mapper = new ObjectMapper();
// get data passed in
@SuppressWarnings("unchecked")
Map<String,Object> inData = mapper.readValue(request.getInputStream(), Map.class);
// send data
response.setContentType("application/json");
Map<String,Object> dat = new HashMap<>();
dat.put("fname", "Tom");
dat.put("lname", "Jones");
dat.put("age", 36);
PrintWriter out = response.getWriter();
mapper.writeValue(out, dat);
}
我认为有不止一种方法可以做到这一点,但我必须能够支持更大的嵌套 JSON 对象。
感谢您的帮助!
布莱克·麦克布莱德
【问题讨论】:
标签: javascript java json servlets jackson