2017-02-20 5 views
0

Может ли кто-нибудь сказать мне, почему эта ошибка?Сообщение о покойном java error

Server Log:

StandardWrapperValve[ws_site.ApplicationConfig]: Servlet.service() for servlet ws_site.ApplicationConfig threw exception 
java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 5 
at com.google.gson.stream.JsonReader.expect(JsonReader.java:339) 
    at com.google.gson.stream.JsonReader.beginObject(JsonReader.java:322) 
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:165) 
    at com.google.gson.Gson.fromJson(Gson.java:791) 

функция Javascript, ответственный за захват данных из заполненной формы и отправки на сервер:

function save() 
{ 

    var str_name = $("#name").val(); 
    var str_email = $("#email").val(); 


    var str_country = $("#country").val(); 
    var str_state = $("#state").val(); 
    var str_city = $("#city").val(); 
    var str_zipcode = $("#zipcode").val(); 
    var str_neighborhood = $("#neighborhood").val(); 
    var str_street = $("#street").val(); 
    var str_number = $("#number").val(); 


    var objdata = '{"email_user":"' + str_email + '","name_user":"' + str_name}'; 
var objlocation = '{"country":"' + str_country + '","state":"' + str_state + '","city":"' + str_city + '","neighborhood":"' + str_neighborhood + '","street":"' + str_street + '","number":"' + str_number + '","zipcode":"' + str_zipcode + '"}'; 

    var obj = '{"user":['+objdata+'],"endereco":['+objlocation+']}'; 

    $.ajax({ 
     headers: {'content-type': 'application/json'}, 
     dataType: 'json', 
     method: "POST", 
     url: "http://localhost:8080/SystemExample/webservice/Save/data", 
     data: obj 
    }).done(function (data) 
    { 
     alert(data); 
    }); 
} 

RESTful Java метод:

@POST 
@Path("data") 
@Produces(MediaType.TEXT_PLAIN) 
@Consumes({MediaType.APPLICATION_JSON}) 
public String registerUser(Gson json) 
{ 
    User u = json.fromJson("user", User.class); 
    Address a = json.fromJson("endereco", Address.class); 
    u.setAddress(a); 
    userDAO.save(u); 
    return "Saved successfully!"; 
} 

Сохраните метод userDAO:

public void save(User u) { 
    EntityManager em = JPAUtil.getEntityManager(); 
    EntityTransaction tx = em.getTransaction(); 

    try { 
     tx.begin(); 
     if (u.getId_User() == null) { 

      em.persist(u); 
     } else { 
      em.merge(u); 
     } 
     tx.commit(); 
    } catch (Exception ex) { 
     ex.printStackTrace(); 
     if (tx != null && tx.isActive()) { 
      tx.rollback(); 
     } 
    } finally { 
     em.close(); 
    } 
} 

Использование Gson для преобразования JSON в объект

+0

Ваш трассировки стека кажется, немного меньше, было там больше нет линий? –

ответ

2

Вы не отправлять объект на сервер, вы просто посылает строку:

var obj = '...'; 

Вместо отправки объекта:

var objdata = { 
    "email_user": str_email, 
    "name_user": str_name 
}; 
var objlocation = { 
    "country": str_country, 
    "state": str_state, 
    "city": str_city, 
    "neighborhood": str_neighborhood, 
    "street": str_street, 
    "number": str_number, 
    "zipcode": str_zipcode 
}; 

var obj = { 
    "user": [objdata], 
    "endereco": [objlocation] 
}; 

Строка, которая выглядит как, объект по-прежнему является строкой.

+0

Да: намного чище –

1

objdata не Populating правильно действительным JSON. Попробуйте с этим:

function save() { 
     var str_name = $("#name").val(); 
     var str_email = $("#email").val(); 
     var str_country = $("#country").val(); 
     var str_state = $("#state").val(); 
     var str_city = $("#city").val(); 
     var str_zipcode = $("#zipcode").val(); 
     var str_neighborhood = $("#neighborhood").val(); 
     var str_street = $("#street").val(); 
     var str_number = $("#number").val(); 

     var objdata = '{"email_user":"' + str_email + '","name_user":"' + str_name + '"}'; 
     console.log(objdata); 

     var objlocation = '{"country":"' + str_country + '","state":"' + str_state + '","city":"' + str_city + '","neighborhood":"' + str_neighborhood + '","street":"' + str_street + '","number":"' + str_number + '","zipcode":"' + str_zipcode + '"}'; 
     console.log(objlocation); 

     var obj = '{"user":[' + objdata + '],"endereco":[' + objlocation + ']}'; 
     console.log(obj); 

     $.ajax({ 
      headers: {'content-type': 'application/json'}, 
      dataType: 'json', 
      method: "POST", 
      url: "http://localhost:8080/SystemExample/webservice/Save/data", 
      data: JSON.parse(obj) 
     }).done(function (data) { 
      alert(data); 
     }); 
    } 
+0

JSON.parse() не требуется, поскольку dataType явно указан как json. –

0

На стороне сервера вы пытаетесь связать данные JSON.

User u = json.fromJson("user", User.class); 
Address a = json.fromJson("endereco", Address.class); 

Это значит user и endereco должен быть JSON объектов, как показано ниже.

{ 
    "user":{ 
     "email_user":"str_mail","name_user":"nameeee" 
    }, 
    "endereco":{ 
     "country":"str_country","state":"str_state","city":"str_city","neighborhood":"str_neighborhood","street":"str_street","number":"str_number","zipcode":"str_zipcode" 
    } 
} 

Но в вашем случае user и endereco на самом деле JSONArray (см квадратные скобки.).

{ 
    "user":[ 
     { 
      "email_user":"str_mail", 
      "name_user":"nameeee" 
     } 
    ], 
    "endereco":[ 
     { 
      "country":"str_country", 
      "state":"str_state", 
      "city":"str_city", 
      "neighborhood":"str_neighborhood", 
      "street":"str_street", 
      "number":"str_number", 
      "zipcode":"str_zipcode" 
     } 
    ] 
} 

Так что изменить ниже линии

var obj = '{"user":['+objdata+'],"endereco":['+objlocation+']}'; 

в

var obj = '{"user":'+objdata+',"endereco":'+objlocation+'}'; 
+0

Я сделал, как вы мне сказали, там оказалось: Могила: строка 1: 0 нет жизнеспособной альтернативы у персонажа 'u' Могила: строка 1: 1 нет жизнеспособной альтернативы у персонажа 'Могила: строка 1: 2 нет жизнеспособной альтернативы в символе 'e' Grave: строка 1: 3 нет жизнеспособной альтернативы на персонаже 'r' Grave: строка 1: 4 нет жизнеспособной альтернативы в символе '%' Я помещаю только один фрагмент. Но только это появляется. –

+0

@DeividSantosAlves Не уверен, что вы пытаетесь сказать –

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