javascript - 发布restful方法java错误

标签 javascript java jquery web-services rest

谁能告诉我为什么会出现这个错误?

服务器日志:

 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转换为对象

最佳答案

您没有向服务器发送对象,而只是发送字符串:

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

看起来像对象的字符串仍然是字符串。

关于javascript - 发布restful方法java错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42346444/

相关文章:

javascript - 从另一点以一定方位行驶一定距离后如何获得纬度和经度?

javascript - 如何获取在 Canvas 上移动的图像的 X 和 Y 坐标

java - 不打印到文本框

javascript - 如何在 JavaScript 中每 5 分钟循环调用两个交替函数?

javascript - for in 循环遍历对象字面量的属性 VS 从 Object 构造的初始化对象

java - 使用线程移动图形 2d 对象

java - 如何为 10 x 10 网格按钮布局中的每个 JButton 提供唯一的 ID/名称

javascript - 更改动态站点脚本以使用最新的 jquery 库

javascript - Jquery FileApi 返回打开不是一个函数

jquery - 计算具有相同 id JQUERY 的 div 元素