У меня не так много опыта работы с Джексоном и сериализацией в JSON. Итак, в тесте Spring Boot MVC я отправляю запрос контроллеру REST, который должен содержать в своем теле объект java, сериализованный в JSON. Контроллер должен сохранить объект в базе данных. Теперь проблема в том, что у объекта есть какие-то ссылки cycli c, например, мой объект является экземпляром такого класса:
public class City {
private String cityName;
private List<Street> streets;
// Getters, Setters
}
public class Street {
private String streetName;
private City city;
// Getters, Setters
}
Итак, это означает, что если я сериализую City
, я бы также сериализовал список Street
s, каждый из которых снова будет содержать City
, поэтому JSON
вырастет до бесконечности.
Также я не могу повернуть поле city
в классе Street
должно быть только String
(название города или что-то в этом роде), потому что, как я уже сказал, эти объекты на самом деле являются сущностями базы данных и должны напрямую ссылаться друг на друга.
Ввод @JsonIgnore
в поле city
, возможно, вариант, но не совсем хороший, потому что тогда контроллеру REST потребуется вручную установить это поле для каждого Street
полученного City
, прежде чем пытаться чтобы сохранить City
. В противном случае набор улиц с city == null
попадет в базу данных. Эти улицы не смогут присоединиться к своим городам в запросах к базе данных.
Итак, скажите, пожалуйста, как обычно обрабатываются такие случаи? Есть ли какая-то аннотация, чтобы посоветовать Джексону сериализовать поле city
в классе Street
только как название города? И если да, будет ли City
затем десериализован правильно?