Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Post restful方法java错误_Javascript_Java_Jquery_Web Services_Rest - Fatal编程技术网

Javascript Post restful方法java错误

Javascript Post restful方法java错误,javascript,java,jquery,web-services,rest,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.

有谁能告诉我为什么会有这样的错误吗

服务器日志:

 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转换为对象时,未将objdata正确填充为有效的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);
        });
    }

objdata未正确填充为有效的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);
        });
    }

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

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

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

您不是在向服务器发送对象,而是在发送字符串:

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

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

在服务器端,您正在尝试绑定
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(见方括号)

所以,在底线下改变

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


在服务器端,您正在尝试绑定
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(见方括号)

所以,在底线下改变

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


你的堆栈跟踪看起来有点短,没有更多的行了吗?你的堆栈跟踪看起来有点短,没有更多的行了吗?是的:很多cleaneries:很多cleaner不需要JSON.parse(),因为数据类型被显式指定为JSON。JSON.parse()不需要,因为数据类型被显式指定为JSON。我按照你说的做了,这里出现了:坟墓:第1:0行在字符“u”坟墓没有可行的替代品:第1:1行在字符“e”坟墓没有可行的替代品:第1:2行在字符“e”坟墓没有可行的替代品:第1:3行在字符“r”坟墓没有可行的替代品:第1:4行在字符“%”没有可行的替代品我只放了一片。“但只有这样,”DeividSantosAlves不知道你想说什么我按你说的做了,这里出现了:坟墓:第1:0行在字符“u”坟墓没有可行的替代品:第1:1行在字符“e”坟墓没有可行的替代品:第1:2行在字符“e”坟墓没有可行的替代品:第1:3行在字符“r”坟墓没有可行的替代品:第1:4行在字符“%”没有可行的替代品我只放了一片。“但只有这一点才出现。”DeividSantosAlves不知道你想说什么