Spring MVC: сериализовать запрос POST с циклическими c ссылками на JSON - PullRequest
0 голосов
/ 08 июля 2020

У меня не так много опыта работы с Джексоном и сериализацией в 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 затем десериализован правильно?

...