Джерси ClientResponse Получить список составных объектов

Я пытаюсь получить результат списка, в основном список объектов, использующих Джерси 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 есть Composite Object, если, например,

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

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

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

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

@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) имеет значение null.


person blacks0ul    schedule 14.03.2012    source источник


Ответы (2)


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

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

person CoffeeCoder    schedule 08.11.2012

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

person Martin Matula    schedule 14.03.2012
comment
Привет Мартин, большое спасибо за ваши усилия. Я использую @@Entity @@XmlRootElement. Не могли бы вы вернуться к вопросу о фрагменте кода класса? - person blacks0ul; 16.03.2012
comment
Какой контейнер вы используете для серверной части? Если GlassFish, то какая версия? Клиент также развернут как веб-приложение? Или это приложение для рабочего стола/командной строки? - person Martin Matula; 16.03.2012
comment
JSF, Glassfish v3.1.1 Спасибо. - person blacks0ul; 16.03.2012
comment
Как вы думаете, все остальное выглядит нормально из приведенного выше кода? Есть ли способ получить JSON, который я получаю, и десериализовать его в Entity, используя Gson или что-то в этом роде? (Потому что я знаю, что REST Facade правильно отправляет данные). Спасибо. - person blacks0ul; 16.03.2012
comment
Какую версию Джерси вы используете на клиенте? Или клиент работает и в GlassFish 3.1.1? (т.е. с использованием Джерси от GlassFish) - person Martin Matula; 16.03.2012
comment
Клиент => Сервер Glassfish v3.1.1 => Sailfin v2.1 Что касается сервера, он поставляется в комплекте со следующей банкой (как часть его среды выполнения, я думаю): jersey-bundle-1.0.3.1 jettison-1.0.1 jsr311-api- 1.0 Однако я добавил jersey-bundle-1.12 jettison-1.1 jsr311-api-1.1.1 На клиенте все API-интерфейсы Jersey v1.12. Нужно ли мне что-то сделать, чтобы переопределить предыдущую версию на сервере Sailfin? ? Проблема осталась :( Спасибо. - person blacks0ul; 16.03.2012
comment
А, это древняя версия Джерси у вас на сервере. Но вы говорите, что считаете, что то, что выдает сервер, правильно, и это клиент не может его прочитать? Можете ли вы опубликовать, как выглядит JSON, отправленный с сервера? - person Martin Matula; 17.03.2012
comment
Вероятно, лучше всего сделать это, зарегистрировав проблему на странице java.net/jira/browse/JERSEY и прикрепите туда файл. - person Martin Matula; 17.03.2012