Ошибка потока Stakover с Джексоном, примененным к объектам JPA для создания JSON
У меня есть JPA
код с OneToMany
отношения. Customer
имеет список Item
проверить. Тем не менее, код продолжают генерировать StackruError
,
Однажды я решил эту проблему, применив @JsonIgnore
при получении List<Item>
от юридического лица Но даже это, похоже, больше не работает.
В Customer
класс:
@OneToMany(mappedBy = "customer", orphanRemoval = true)
@JsonIgnore
private List<Item> items;
В Item
класс:
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "CUSTOMER_ID", nullable = false)
private Customer customer;
А также CustomerRest
класс:
@Path("customers")
public class CustomerRest {
@Inject
NewSessionBean newSessionBean;
@GET
@Produces(MediaType.APPLICATION_JSON)
public List<Customer> getAllCustomers() {
return newSessionBean.getCustomers();
}
}
метод newSessionBean.getCustomers()
:
public List<Customer> getCustomers(){
TypedQuery<Customer> q= em.createQuery("select c from Customer c", Customer.class);
return q.getResultList();
}
Я ожидаю, что сообщение JSON будет отформатировано, но никаких признаков этого нет. Все, что я получаю, это java.lang.StackruError
в браузере и журнале сервера генерирует следующее:
Generating incomplete JSON|#]
java.lang.StackruError
java.lang.StackruError at org.eclipse.yasson.internal.serializer.DefaultSerializers.findByCondition(DefaultSerializers.java:130)
1 ответ
Похоже, вы используете проект Яссона, а не Джексона. В этом случае вы должны использовать @JsonbTransient
аннотаций. Смотрите документацию:
По умолчанию,
JSONB
игнорирует свойства с закрытым доступом. Все общедоступные свойства - либо общедоступные, либо непубличные поля с общедоступными получателями сериализуются вJSON
текст.Исключение свойств может быть сделано с
@JsonbTransient
аннотаций. Свойства класса с пометкой@JsonbTransient
аннотации игнорируютсяJSON Binding
двигатель. Поведение отличается в зависимости от того, где@JsonbTransient
аннотация размещена.
Смотрите также: