Java Jackson Serialization игнорирует определенные вложенные свойства с аннотациями - PullRequest
0 голосов
/ 02 марта 2019

Я использую Джексона (с пружинной загрузкой), чтобы вернуть некоторые DTO, такие как json.Проблема в том, что у меня есть конкретный DTO, который содержит вложенные объекты, который содержит другие объекты.Могу ли я игнорировать некоторые вложенные свойства непосредственно из DTO, без каких-либо аннотаций на вложенных объектах (потому что они используются в других DTO)

public class MyDTO {

  private MyObjectA a;

}

public class MyObjectA a {

  private MyNestedObject b;

}

Я хочу, чтобы при сериализации MyDTO исключить MyNestedObject b Я пробовал с @JsonIgnoreProperties, но он не работает с вложенными объектами.Могу ли я выполнить эту миссию только с аннотациями в классе MyDTO?

1 Ответ

0 голосов
/ 02 марта 2019

Вы можете использовать @JsonView.Вы должны аннотировать некоторые вложенные объекты , но это не является статичной вещью, которая затем скрывает все от других DTO или около того.

Например, вы можете объявить следующие представления для использования:

public class View {
    public static class AllButMyNestedObject {
    }
    public static class AlsoMyNestedObject 
        extends AllButMyNestedObject {
    }    
}

Затем аннотировать ваши классы, такие как:

@JsonView(AllButMyNestedObject.class)
public class MyDTO {
    private MyObjectA a;
}

и

public class MyObjectA {
    @JsonView(AlsoMyNestedObject.class)
    private MyNestedObject b;
}

вы можете решить с помощью mapper, что сериализировать, например:

ObjectMapper mapper = new ObjectMapper();
String result = mapper
    .writerWithView(View.AlsoMyNestedObject.class)
// OR .writerWithView(View.AllButNestedObject.class)
    .writeValueAsString(myDto);
...