Откуда берутся «целевые» свойства в моей сериализации JSON? - PullRequest
0 голосов
/ 07 марта 2019

У меня есть служба весенней загрузки, использующая MongoDB в качестве хранилища для моих bean-компонентов. Я добавил функцию для загрузки компонента в формате JSON и загрузки его в другую систему (или просто для создания резервной копии файла).

Я использую ObjectMapper с методом writeValueAsString. Все это работает, как и ожидалось, за исключением того, что есть дополнительные свойства, которые не являются частью моего компонента.

Все свойства, которые определены с помощью @DBRef, таким образом, указывая на другие bean-компоненты в MongoDB, имеют свойство target, содержащее точно такой же сериализованный bean-компонент. Например: я отслеживаю пользователя, который создал бин через графический интерфейс:

{
    createdBy: {
        id: "5bb743feacbd6505304c025e",
        username: "admin",
        target: {
            id: "5bb743feacbd6505304c025e",
            username: "admin"
        }
    }
}

Откуда это target и есть ли способ избавиться от него в JSON?

1 Ответ

2 голосов
/ 07 марта 2019

С Сериализация Java в JSON с помощью Jackson PTH и Spring Data. MongoDB DBRef генерирует дополнительное целевое свойство

Поле Target добавляется Spring Data, поскольку оно является отложенной коллекцией.Это похоже на обработчик данных и т. Д. В Hibernate для JPA.

Option1: чтобы игнорировать их, нужно просто добавить @JsonIgnoreProperties(value = { "target" }) на уровне класса

@Document(collection = "song")
@JsonIgnoreProperties(value = { "target" })
public class Song {
 ...
}

Option2: сделать коллекцию не ленивой

Вариант 3: создайте свой собственный сериализатор DBRef, как указано Spring Data Mongo + Lazy Load + REST Jackson

...