javascript - 使用 Jackson 在 Javascript 和 Java 之间传输 JSON

标签 javascript java json servlets jackson

我想在浏览器 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 对象。

感谢您的帮助!

布莱克·麦克布莱德

最佳答案

r对于服务器端,您尝试过Jersey的JSON支持吗?如果您使用 Maven,则可以 get you started .

@POST
@Path("/JavaScriptInterface")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public Map<String,String> handlePost(Map<String,String> inData) {
     Map<String,Object> dat = new HashMap<>();
     dat.put("fname", "Tom");
     dat.put("lname", "Jones");
     dat.put("age", 36);
     return dat;
}

同样对于客户端,您应该检查使用 jQuery。这是stack overflow answer .

 var data = JSON.stringify({name: 'dog'});
 $.ajax({
    type: "POST",
    url: 'http://localhost:8084/MyApp/JavaScriptInterface',
    dataType: 'json',
    data: data,
    success: function (responseData) {
        // this prints out your data
        console.log("successful", responseData);
    }
 })

关于javascript - 使用 Jackson 在 Javascript 和 Java 之间传输 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31040203/

相关文章:

javascript - JS : Hashing function for combinable hashes from Objects

java - 在java中使用swing将按钮放置在指定位置

Javafx HBox Hgrow(SOMETIMES)子滚动 Pane 节点如何获取宽度?

javascript - 在 Ext 中使用 XTemplate 和 SimpleStore

javascript - 获取滚动元素jquery的百分比

javascript - Google map 未按预期工作

json - 我如何从内容类型为 application/hal+json 的 Rocket 处理程序响应?

json - 如何在 Artillery.i.o 中运行 Node-js 脚本而不将其包含在负载测试场景中

javascript - OOP Jquery 由于闭包而丢失值

java - 提高数据库访问性能