2015-08-03 2 views
0

Я пытаюсь отправить JSON строку на сервер, а затем сохранить его в БДзначения JSON возвращение нуля при отправке с запросом Ajax

Ниже мой код:

$.ajax({ 
     url: 'JsonProcessor.do', 
     type: 'post', 
     dataType: 'json', 
     data: { 
       loadProds: 1, 
       test: JSON.stringify(StateObject) 
       }, 
     success: function (data) 
     { 
     console.log("worked"); 
     }, 
     error: function (data) { 
     alert('failed'); 
     } 
     }); 

Servlet:

protected void doPost(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 

     String json = request.getParameter("test"); 
     System.out.println("json is: " + json); 
     Connection con = null; 
     ResultSet rs = null; 
     try { 
      con = OracleDBConnection.getConnection(); 
      String query = "insert into JJS (JSON_INFO) values(?)"; 
      PreparedStatement pst = con.prepareStatement(query); 
      pst.setString(1, json); 
      rs = pst.executeQuery(); 
      if (rs.next()) { 
       System.out.println("sucess"); 
      } else { 
       System.out.println("failed"); 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
      System.out.println("DB releated exception"); 
     } 

Однако, когда я пытаюсь напечатать request.getparameter(json), он возвращает null.

Это JSON Я пытаюсь отправить:

{ 
    "cells": [ 
     { 
      "type": "basic.Rect", 
      "position": { 
       "x": -2, 
       "y": 33 
      }, 
      "size": { 
       "width": 71, 
       "height": 625 
      }, 
      "angle": 0, 
      "isInteractive": false, 
      "id": "e276b993-af5e-4e32-9879-fc3d817c0811", 
      "z": 1, 
      "attrs": { 
       "rect": { 
        "fill": "#EEEEEE", 
        "stroke": "#008B8B", 
        "stroke-width": 2 
       }, 
       ".": { 
        "magnet": false 
       } 
      } 
     }, 
     { 
      "type": "basic.Rect", 
      "position": { 
       "x": 10, 
       "y": 50 
      }, 
      "size": { 
       "width": 51, 
       "height": 41 
      }, 
      "angle": 0, 
      "isInteractive": false, 
      "id": "f8826904-678c-4857-ad46-f86e69d1db32", 
      "z": 2, 
      "attrs": { 
       "rect": { 
        "fill": "#D6F2FC", 
        "stroke": "#7E7E7E" 
       }, 
       ".": { 
        "magnet": false 
       } 
      } 
     }, 
     { 
      "type": "basic.Circle", 
      "size": { 
       "width": 53, 
       "height": 53 
      }, 
      "position": { 
       "x": 8, 
       "y": 130 
      }, 
      "angle": 0, 
      "isInteractive": false, 
      "id": "e4ee7b74-3c06-4e1e-8ce7-8baf6743c27c", 
      "z": 3, 
      "attrs": { 
       ".": { 
        "magnet": false 
       }, 
       "circle1": { 
        "fill": "white", 
        "stroke-width": 2, 
        "stroke": "green" 
       } 
      } 
     }, 
     { 
      "type": "basic.Circle", 
      "size": { 
       "width": 53, 
       "height": 53 
      }, 
      "position": { 
       "x": 8, 
       "y": 225 
      }, 
      "angle": 0, 
      "isInteractive": false, 
      "id": "04d4a40b-f99b-4c16-89a9-7d072e30c4ad", 
      "z": 4, 
      "attrs": { 
       ".": { 
        "magnet": false 
       }, 
       "circle2": { 
        "fill": "white", 
        "stroke": "green" 
       } 
      } 
     }, 
     { 
      "type": "basic.Circle", 
      "size": { 
       "width": 53, 
       "height": 53 
      }, 
      "position": { 
       "x": 8, 
       "y": 320 
      }, 
      "angle": 0, 
      "isInteractive": false, 
      "id": "97a01219-b7e2-4a52-9248-eb41dc7443b4", 
      "z": 5, 
      "attrs": { 
       ".": { 
        "magnet": false 
       }, 
       "circle3": { 
        "fill": "white", 
        "stroke": "green" 
       } 
      } 
     }, 
     { 
      "type": "basic.Rect", 
      "position": { 
       "x": 10, 
       "y": 420 
      }, 
      "size": { 
       "width": 51, 
       "height": 41 
      }, 
      "angle": 0, 
      "isInteractive": false, 
      "id": "ed74bfd7-c7e2-4f68-85c3-0f1865243d3e", 
      "z": 6, 
      "attrs": { 
       ".": { 
        "magnet": false 
       }, 
       "rectGroup0": { 
        "fill": "white", 
        "stroke": "#7E7E7E" 
       } 
      } 
     }, 
     { 
      "type": "basic.Rect", 
      "position": { 
       "x": 35, 
       "y": 505 
      }, 
      "size": { 
       "width": 45, 
       "height": 45 
      }, 
      "angle": 0, 
      "isInteractive": false, 
      "id": "008c90ea-2598-4761-8775-fc3601c8935d", 
      "z": 7, 
      "attrs": { 
       "rect": { 
        "fill": "#FFED6B", 
        "stroke": "#DBCB62", 
        "width": 1, 
        "height": 1, 
        "stroke-width": 1, 
        "transform": "rotate(45)" 
       }, 
       ".": { 
        "magnet": false 
       } 
      } 
     } 
    ] 
} 
+1

Что такое 'request.getparament'? : o – Karthik

ответ

4

Есть несколько проблем с вашим кодом:

При отправке, JQuery уже делает то stringify для вас, так что вы при вызове его себе вас фактически создает строковый атрибут в JSON отправленного (вы можете проверить это легко, наблюдая данные, отправляемые с помощью браузера)

$.ajax({ 
    url: 'JsonProcessor.do', 
    type: 'post', 
    dataType: 'json', 
    data: { 
      loadProds: 1, 
      test: JSON.stringify(StateObject) 
      }, 
     ... 

будет на самом деле CREAT е тело запроса HTTP, который выглядит следующим образом:

{ 
    loadProds: 1, 
    test: "{\"state\": .... " 
} 

так просто написать:

$.ajax({ 
    url: 'JsonProcessor.do', 
    type: 'post', 
    dataType: 'json', 
    data: { 
      loadProds: 1, 
      test: StateObject 
      }, 
     ... 

и вам будет хорошо на этой части.

Что касается серверной части, вы фактически ищете параметр запроса с именем «test». Но это не то, что отправляется. Вместо этого вы получаете «тело», которое включает json. просто нет стандартного параметра запроса при использовании dataType: json.

так в вашем случае это

String json = IOUtils.toString(request.getInputStream()); 

Также не то, что вы извлекаете JSON там включает в себя «loadProps: 1» ... Затем вы можете захотеть, чтобы преобразовать строку в объект (используя т.е. jackson), чтобы вы могли работать с ним.

+0

Что такое loadProps: 1? Я получил его с другого сайта – kittu

+0

loadProps: i hav eno idea, его просто дополнительные данные, если вы его не используете, просто напишите «data: StateObject», а затем просто запишите ваши данные. jackson: вам нужно, чтобы apache commons lang в вашем cp (https://commons.apache.org/proper/commons-lang/) – Niko

Смежные вопросы