Джерси ClientResponse Получить список составных объектов - PullRequest
2 голосов
/ 14 марта 2012

Я пытаюсь получить результат списка, в основном список объектов, использующих 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>>() {
    });

Однако приведенный выше код не работает, если у Entity User есть составной объект, например,

public class User {
  private UserId userId;
}
public class UserId {
  private int id;
  private int categoryId;
}

В этом случае JSON десериализуется Джерси и возвращает нуль для типа поля UserId внутри класса User. Я проверил возвращенный JSON, и все кажется хорошим на стороне RESTful Server, но вложенный ответ JSON не ясно обрабатывается на клиенте.

Любая помощь будет принята с благодарностью. Я не уверен, что это из-за препроцессора Джексона.

Ниже приводится фактический фрагмент кода. В нем участвуют два класса Участник и УчастникPK (первичные для каждого Участника).

@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 (Composite PK) является нулевым.

Ответы [ 2 ]

4 голосов
/ 09 ноября 2012

Вы вставили только фрагмент кода, поэтому я не знаю, исключена ли эта часть, но в моем коде у меня не было установщиков для полей.У меня были добытчики, но нет установщиков.

Без сеттеров мои составные объекты сами по себе были ненулевыми, но члены этих объектов сами были нулевыми.

1 голос
/ 15 марта 2012

Я пытался воспроизвести его, но использование тех же структур данных работало для меня. Какую версию Джерси вы используете? Класс пользователя аннотирован @XmlRootElement или вы используете функцию сопоставления POJO?

...