Jersey ClientResponse获取复合实体列表

时间:2012-03-14 18:28:35

标签: java json rest jersey jackson

我正在尝试获取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)为空。

2 个答案:

答案 0 :(得分:4)

您只粘贴了一个代码段,因此我不知道是否排除了此部分,但在我的代码中,我没有这些字段的setter。我有吸气剂,但没有安装者。

如果没有setter,我的复合对象本身就是非null,但这些对象的成员本身都是null。

答案 1 :(得分:1)

我试图重现它,但使用相同的数据结构对我有用。您使用的是什么版本的Jersey? User类是用@XmlRootElement注释还是使用POJO映射功能?