Джерси Джексон JSON и Eclipselink JPA - Как динамически игнорировать свойства JSON собственных объектов без @JsonIgnore?

Итак, у меня есть база данных и библиотека, полная сущностей JPA, и я в общих чертах читаю их на службе отдыха Джерси. Когда я пытаюсь прочитать сущность, она рекурсивно читает двусторонние отношения. Я знаю, что @JsonIgnore решает эту проблему, но база данных слишком велика, чтобы вручную проходить через каждую сущность и добавлять @JsonIgnore в каждое поле сущностей-владельцев.

Покупатель:

@Entity
public class Customer implements DomainObject{

    private static final long serialVersionUID = 2543387766776209353L;

    @Id
    private long id;
    private String firstName;
    private String lastName;

    @OneToOne(fetch = FetchType.LAZY, mappedBy="customer",cascade={CascadeType.ALL})
    private Address address;

    ...Getters and Setters...

}

Адрес:

@Entity
public class Address implements DomainObject {

    private static final long serialVersionUID = 2543387766776209353L;

    @Id
    private long id;
    private String city;
    private String street;

    @PrimaryKeyJoinColumn
    @OneToOne(fetch = FetchType.LAZY)
    private Customer customer;

    ...Getters and Setters...
}

По сути, я хочу игнорировать отправку клиента в адрес Json без @JsonIgnore, если это возможно. Если нет, есть ли другой метод построения JSON, который я могу использовать для генерации JSON, которые соответствуют JPA-ноте владельцев и полей mappedBy?

1 ответ

Возможно, вы могли бы рассмотреть возможность создания различных объектов для ваших ответов служб REST, как описано в шаблоне Объект передачи данных.

Это потребует от вас написания большего количества кода, но даст вам больший контроль над ответами ваших сервисов, даже позволяя вам добавлять агрегаты в случае необходимости, чтобы избежать ненужных обращений клиентов к сервису игрушек, как описано в статье Википедии.

Этот ответ более подробно описывает DTO.

Другие вопросы по тегам