Json RPC 自定义对象在通过网络获取后为空

Json RPC Custom Object is null after getting it over network

我正在尝试构建两个可以使用 JSON RPC 通过网络相互交互的程序。

它目前适用于整数等原始类型,但自定义 Classes/Objects 总是返回 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;
}

这是尝试调用其他程序和 returns 自定义对象列表的方法。通过网络获取数据后,所有字段均为空。

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

我不认为这些方法有什么问题,我的猜测是我在对象 class 本身中遗漏了一些东西,因为 Jackson 试图反序列化该对象而我遗漏了一个注释什么的。

@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 class,它位于一个单独的程序中并作为两个程序的依赖项安装。

我的问题是我是否遗漏了 ServiceInformation class 中的某些内容,因为在我通过网络传输它之前,所有字段都有值,而在传输之后所有字段都为空。

在尝试找出解决方案后,我将每个 LinkedList 更改为普通列表。这似乎解决了问题。

出于某种原因 Java 无法序列化 LinkedList。