java - 尝试使用 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/
解决方案
@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);
}
推荐阅读
- javascript - document.getElementByClassname,它不起作用
- flutter - 在颤振小部件的字段初始化程序中访问它
- c# - 是否应该等待指标调用?不等待他们安全吗?
- python - 如何在熊猫中找到与给定浮点数最接近的行
- angular - 启用了 fullTemplateTypeCheck 和 strictTemplates 的 Angular 9:类型上不存在属性
- bash - 使用 Rsync 从文本文件中读取变量,但在 bash 中包含通配符
- r - 没有列名和 SAS 加载文件的 CSV 文件 - 我可以使用 R 中的加载文件吗?
- c# - Azure 应用服务中的 HTTP 502(请求超时)日志记录和故障排除
- git - Git推送整个分支而不是仅更改
- linq - 如何在条件下排除 .Include 的某些部分?