我正在尝试构建两个程序,它们可以使用JSON RPC通过网络相互交互。
它目前适用于整数等基本类型,但自定义类/对象总是以null返回。
这是从数据库中获取数据的方法。数据被正确收集,没有字段为空。
public LinkedList<ServiceInformation> getServiceInformations() {
LinkedList<ServiceInformation> returnList = new LinkedList<>();
try (Connection conn = DriverManager.getConnection("jdbc:h2:" + Main.config_db_location + ";AUTO_SERVER=TRUE",
Main.config_db_username, Main.config_db_password)) {
// read data from database
PreparedStatement stmt = conn.prepareStatement("SELECT * FROM BCSTASKS_SERVICE");
ResultSet rs = stmt.executeQuery();
while (rs.next()) {
// Create a new ServiceInformation with the name and description
ServiceInformation tempInformation = new ServiceInformation(rs.getString("TicketName"),
rs.getString("TicketDescription"), rs.getString("JTaskID"), rs.getBoolean("wasShown"));
// Add the ServiceInformation to the list
returnList.add(tempInformation);
}
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
return returnList;
}
这是一个尝试调用其他程序并返回自定义对象列表的方法。通过网络获取数据后,所有字段都为空。
public static LinkedList<ServiceInformation> getServiceInformationsRPC() {
LinkedList<ServiceInformation> returnList = new LinkedList<>();
try {
URL url = new URL(getAPIUrl());
JsonRpcHttpClient client = new JsonRpcHttpClient(url);
DatabaseService dbService = ProxyUtil.createClientProxy(Syncer.class.getClassLoader(), DatabaseService.class, client);
returnList = dbService.getServiceInformations();
return returnList;
} catch (Throwable t) {
Main.logger.error("Couldn't get service information");
t.printStackTrace();
}
return returnList;
}
我不认为方法有什么问题,我的猜测是我在对象类本身中遗漏了一些东西,因为杰克逊试图对对象进行反序列化,我遗漏了一个注释或其他东西。
@JsonIgnoreProperties(ignoreUnknown = true)
public class ServiceInformation {
/** The name of the ticket */
@JsonProperty("TicketName")
private final String TicketName;
/** The description of the ticket */
@JsonProperty("TicketDescription")
private final String TicketDescription;
/** The JTaskID of the ticket */
@JsonProperty("JTaskID")
private final String JTaskID;
/** Boolean to see if the ticket was already shown as a notification */
@JsonProperty("WasShown")
private boolean WasShown;
/**
* Class that defines a ServiceInformation/Ticket.
*
* @param TicketName is the name of the ticket.
* @param TicketDescription is a more detailed description of the problem.
* @param JTaskID
* @param WasShown
*/
@JsonCreator
public ServiceInformation(@JsonProperty("TicketName") String TicketName,
@JsonProperty("TicketDescription") String TicketDescription, @JsonProperty("JTaskID") String JTaskID,
@JsonProperty("WasShown") boolean WasShown) {
this.TicketName = TicketName;
this.TicketDescription = TicketDescription;
this.WasShown = WasShown;
this.JTaskID = JTaskID;
}
/**
* Get the ticket name.
*
* @return {@link #TicketName}
*/
@JsonProperty("TicketName")
public String getTicketName() {
return TicketName;
}
/**
* Get the ticket description.
*
* @return {@link #TicketDescription}
*/
@JsonProperty("TicketDescription")
public String getDescription() {
return TicketDescription;
}
/**
* Get the tickets JTaskID
*
* @return {@link #JTaskID}
*/
@JsonProperty("JTaskID")
public String getJTaskID() {
return JTaskID;
}
/**
* Get the value of {@code WasShown}
*
* @return {@link #WasShown}
*/
@JsonProperty("WasShown")
public boolean getWasShown() {
return WasShown;
}
}
两个程序都使用相同的ServiceInformation类,该类位于单独的程序中,并作为依赖项安装在两个程序中。
我的问题是,如果我在ServiceInformation类中遗漏了什么,因为在我通过网络传输之前,所有字段都有值,而在传输之后,所有字段都是空的。
在试图找出一个解决方案后,我把每个LinkedList都变成了一个普通的列表。这似乎解决了问题。
不管出于什么原因,Java都无法序列化LinkedList。
我阅读了有关通过网络发送序列化对象的好处的文章。性能和尺寸成本。 有些解释了DataContract和使用JSON或XML序列化。 但是我找不到关于如果我不使用这些属性会发生什么的文章,并且我返回一个对象,假设我的对象的属性和状态是基本类型。显然,当我具体使用DataContractJsonSerializer之类的序列化程序及其WriteObject方法时,它会抛出一个异常。 例如,如果我在We
问题内容: 我有一个JSON文件,其中包含一些我想在AngularJS网站上访问的数据。现在,我要从数组中仅获取一个对象。因此,我想例如ID为1的商品。 数据如下所示: 我想使用AngularJS $ http功能加载数据,如下所示: 这正在工作。但是,现在如何从获取的数组中获取特定的数据对象(按ID)呢? 在此先感谢您的帮助。 马克·马克 问题答案: 唯一的方法就是遍历数组。显然,如果您确定结果
问题内容: 我应该使用什么图书馆?有什么功能对我有帮助? 问题答案: 最简单的方法可能是使用序列化。因此,您的对象类必须实现可序列化,因此必须具有所有成员(primitves和大多数标准Java类已经做到了)。这允许在运行时在对象实例和字节流之间进行映射。 您还需要用于Transer的协议。如果您不想处理流传输中的字节流,可以看看RMI,尽管这并不困难。但是,使用RMI可以使您以后构建功能更强大的
4.4. 通过 getattr 获取对象引用 4.4.1. 用于模块的 getattr 4.4.2. getattr 作为一个分发者 你已经知道 Python 函数是对象。 你不知道的是,使用 getattr 函数,可以得到一个直到运行时才知道名称的函数的引用。 例 4.10. getattr 介绍 >>> li = ["Larry", "Curly"] >>> li.pop
我有一个这样的用例。我在Mongo DB中有问题,有CRUD微服务。在那里,我公开了一个API方法,通过查询参数提供的ID列表获取问题。比如说,为了简单起见,用户会提出一些问题?id=2,id=7,id=4,id=5 然后我需要按照同样的顺序返回问题列表,如下所示 但是请注意,这既不是ASC也不是DESC,而是可以是任何任意顺序,例如 我正在使用org。springframework。数据mong
我有两个表1)krs_question_bank 2)krs_options 而我正在调用Session.Save(问题)。生成了Hibernate查询,但..我有以下错误。有什么办法可以解决这个错误吗?