2015-06-25 6 views
-1

Я хочу перенести потенциально большой, вложенный JSON между браузером Javascript (JS) и моим сервлетом Java. Я могу передавать JSON с Java на JS, но не с JS на Java-сервлет. Я получаю сообщение об ошибке:Передача JSON в/из Javascript и Java с помощью Jackson

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 ,

Спасибо за помощь!

Blake McBride

ответ

0

rFor стороне сервера, вы пробовали поддержку 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); 
    } 
}) 
0

Я думаю, что я получил его на работу, изменив одну строку файла JS, чтобы:

xmlhttp.send(JSON.stringify({name: 'dog'})); 
Смежные вопросы