Джерси Джексон 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.