【发布时间】:2021-04-21 14:48:03
【问题描述】:
我有三个模块,客户端、服务器和通用。公共模块完全由 POJO 模型组成。
所以在 common 模块中我有一个这样定义的模型(简化),注意 BaseModel 是一个包含常见审计元素的类,如创建日期时间等,你应该能够排除它:
package model;
public class User extends BaseModel
{
private String user, user_id;
public String getUser() { return user; }
public void setUser(String user) { this.user = user; }
public String getUser_id() { return user_id; }
public void setUser_id(String user_id) { this.user_id = user_id; }
}
我正在尝试请求用户列表,响应放在仅在客户端模块中定义的类中,如下所示:
package control.model;
import java.util.List;
public class Response<T>
{
private String status;
private List<T> response;
public String getStatus() { return status; }
public void setStatus(String status) { this.status = status; }
public List<T> getResponse() { return response; }
public void setResponse(List<T> list) { this.response = list; }
}
服务器模块像这样创建 JSON 响应:
private static String RESP = "{\"status\":\"%s\", \"response\":%s}";
List<User> users = get from database in the server module.
String resp = String.format(RESP, "PASS", new Gson().toJson(users));
common 的模块定义如下:
module inventoryCommon
{
requires transitive javafx.base;
exports model;
opens model to gson;
}
客户端的模块定义如下:
module fileManager
{
requires transitive java.sql;
requires transitive javafx.graphics;
requires transitive javafx.controls;
requires org.apache.logging.log4j;
requires org.apache.logging.log4j.core;
requires inventoryCommon;
requires gson;
requires transitive Java.WebSocket;
exports control;
exports ui to javafx.graphics;
opens control.model to gson;
}
在我的客户端类中(也在客户端模块中)我尝试像这样解析响应:
Response<User> response = new Gson().fromJson(json, Response.class);
这里是字符串 json 的值示例:
{"status":"PASS", "response":[{"user":"Me","user_id":"ME123"}, {"user":"You","user_id":"YOU456"}]}
对我来说一切都很好,但我收到了这个异常,这似乎表明问题是用户类位于与我尝试解析它的模块不同的模块中?
java.lang.ClassCastException:com.google.gson.internal.LinkedTreeMap 类无法转换为类 model.User(com.google.gson.internal.LinkedTreeMap 位于加载程序“app”的模块 gson@2.4 中;模型.用户在加载程序'app'的模块inventoryCommon中)
如果您需要更多详细信息,请告诉我。
PS 我的代码基于我在这篇文章中读到的内容: tutorial
【问题讨论】:
标签: gson java-module