我正在尝试获取List的结果,基本上是使用Jersey RESTful API(服务器和客户端)的实体列表
UserRESTClient client = new UserRESTClient();
ClientResponse response = client.getUsersByType(ClientResponse.class, String.valueOf(userType));
List<User> participants = response.getEntity(new GenericType<List<User>>() {
});
但是,如果实体用户具有复合对象(例如,
),则上述代码不起作用public class User {
private UserId userId;
}
public class UserId {
private int id;
private int categoryId;
}
在这种情况下,Jersey会对JSON进行反序列化,并为类用户中的字段类型 UserId 返回null。我检查了返回的JSON,RESTful Server端的一切似乎都很好,但是客户端没有明确处理嵌套的JSON响应。
非常感谢任何帮助。我不确定是不是因为Jackson预处理器。
以下是实际的代码段。它涉及两个类别Participant和ParticipantPK(每个参与者的主要成员)。
@Entity
@Table(name = "conference_participant")
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "Participant.findAll", query = "SELECT p FROM Participant p"),
public class Participant implements Serializable {
private static final long serialVersionUID = 1L;
@EmbeddedId
protected ParticipantPK participantPK;
}
@Embeddable
public class ParticipantPK implements Serializable {
@Basic(optional = false)
@NotNull
@Column(name = "conference_id")
private int conferenceId;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 150)
@Column(name = "participant_sip_uri")
private String participantSipUri;
public ParticipantPK() {
}
public ParticipantPK(int conferenceId, String participantSipUri) {
this.conferenceId = conferenceId;
this.participantSipUri = participantSipUri;
}
用于检索ClientResponse的代码,
List<Participant> participants = response.getEntity(new GenericType<List<Participant>>() {
});
但是,ParticipantPK(复合PK)为空。
答案 0 :(得分:4)
您只粘贴了一个代码段,因此我不知道是否排除了此部分,但在我的代码中,我没有这些字段的setter。我有吸气剂,但没有安装者。
如果没有setter,我的复合对象本身就是非null,但这些对象的成员本身都是null。
答案 1 :(得分:1)
我试图重现它,但使用相同的数据结构对我有用。您使用的是什么版本的Jersey? User类是用@XmlRootElement注释还是使用POJO映射功能?