首页 > 解决方案 > 尝试使用 Gson 库将 Json 解析为 Java 对象时抛出异常

问题描述

我正在尝试创建一个获取 Json 字符串的 Web 方法。我需要获取该 json 字符串并解析为 java 对象。

当我试图这样做时,我得到了那个例外:

javax.servlet.ServletException: com.google.gson.JsonSyntaxException: 
java.io.EOFException: End of input at line 1 column 2

根本原因

com.google.gson.JsonSyntaxException: java.io.EOFException: End of input at 
line 1 column 2

根本原因

 java.io.EOFException: End of input at line 1 column 2

那是我的代码:

@GET
@Produces("application/text")
@Path("checkuser/{user}")
public String checkUser(@PathParam("user") String mu) throws SQLException, ClassNotFoundException {

    gson = new Gson();
    modelUserGet = gson.fromJson(mu, ModelUser.class);

    StringBuilder query = new StringBuilder();

    query.append("SELECT user, password, email,");
    query.append(" telephone, creation_data, last_update_data ");
    query.append("FROM user ");
    query.append("WHERE user ='");
    query.append(modelUserGet.getUser());
    query.append("' ");

    datamysql = new DataMySqlAccess();
    Statement st = datamysql.getConnection().createStatement();
    ResultSet rs = st.executeQuery(query.toString());



    String result = "";

    if(rs.next() == true){

        modelUserSend = new ModelUser(
                rs.getString("user"),
                rs.getString("password"),
                rs.getString("email"),
                rs.getString("telephone"),
                rs.getString("creation_data"),
                rs.getString("last_update_data")
        );

        if(!modelUserSend.getPassword().equals(modelUserGet.getPassword()))
            result = "INVALID_PASSWORD";
        else
            result = "OK";
    } else 
        result = "INVALID_USER";


    modelUserSend.setCheckUserReponse(result);

    return gson.toJson(modelUserSend);
}

这是我的模型课

private String user;
private String password;
private String email;
private String telephone;
private String creationData;
private String lastUpdateData;
private String checkUserResponse;

public ModelUser(String user, String password, String email, String telephone, String creationData, String lastUpdateData){
    this.user = user;
    this.password = password;
    this.email = email;
    this.telephone = telephone;
    this.creationData = creationData;
    this.lastUpdateData = lastUpdateData;
}

我发送那个参数json字符串

{
    "user":"admin",
    "password": "admin",
    "email":"admin@admin.com",
    "telephone":"(11) 3761-5292",
    "creationData":"2018-07-08",
    "lastUpdateData":"2018-07-08"
}

我做错了什么?

谢谢。o/

标签: javajsonrestobject

解决方案


@PathParam("user") 字符串 mu

这是您获得的 PathParameter,它是一个字符串。这就是异常的原因。它无法转换为模型。

在您的情况下,将其作为单独的路径参数变量并在方法中使用它。

编辑 1

我认为,用户名是参数中唯一需要的项目。因此,最好将用户名作为路径参数获取。和其他细节,你是从数据库中获取的。

@GET
@Produces("application/text")
@Path("checkuser/{user}")
public String checkUser(@PathParam("user") String userName) throws SQLException, ClassNotFoundException {

StringBuilder query = new StringBuilder();

query.append("SELECT user, password, email,");
query.append(" telephone, creation_data, last_update_data ");
query.append("FROM user ");
query.append("WHERE user ='");
query.append(userName);
query.append("' ");

datamysql = new DataMySqlAccess();
Statement st = datamysql.getConnection().createStatement();
ResultSet rs = st.executeQuery(query.toString());



String result = "";

if(rs.next() == true){

    modelUserSend = new ModelUser(
            rs.getString("user"),
            rs.getString("password"),
            rs.getString("email"),
            rs.getString("telephone"),
            rs.getString("creation_data"),
            rs.getString("last_update_data")
    );

    if(!modelUserSend.getPassword().equals(modelUserGet.getPassword()))
        result = "INVALID_PASSWORD";
    else
        result = "OK";
} else 
    result = "INVALID_USER";


modelUserSend.setCheckUserReponse(result);

return gson.toJson(modelUserSend);

}


推荐阅读