【问题标题】:Transferring JSON to/from Javascript & Java with Jackson使用 Jackson 向/从 Javascript 和 Java 传输 JSON
【发布时间】: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


    【解决方案1】:

    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);
        }
     })
    

    【讨论】:

      【解决方案2】:

      我想我可以通过将 JS 文件的一行更改为:

      xmlhttp.send(JSON.stringify({name: 'dog'}));
      

      【讨论】:

        猜你喜欢
        • 2011-03-26
        • 2014-12-22
        • 2018-12-09
        • 1970-01-01
        • 2015-03-10
        • 2012-07-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多