Можно ли настроить Jackson-Json Mapper таким образом, чтобы исключать свойства, основанные на том, какой объект он сериализует? - PullRequest
7 голосов
/ 24 марта 2010

Скажем, у меня есть такие объекты, как бизнес с объектами списка адресов и заказ с бизнесом.

Можно ли настроить так, чтобы при сериализации Заказа он исключал список адресов из бизнес-объекта, а при сериализации бизнеса он включал этот список?

Я использую ajax для извлечения данных для RIA, и при работе с Орденом мне не очень важны адресные данные, но при работе с Business мне нужен список.

Я также использую Hibernate для постоянства, так что это действительно оптимизация эффективности и производительности.

Ответы [ 4 ]

8 голосов
/ 26 марта 2010

Если я правильно понимаю вопрос, да, я думаю, что JSON Views для Джексона позволит это. По сути, вы должны создать два разных представления (профиля) для одного типа и выбрать, какое из них использовать для сериализации.

5 голосов
/ 24 марта 2010

Вы можете использовать JsonIgnore Annotation , чтобы игнорировать список Address при сериализации и отключить использование аннотаций в ObjectMapper 's SerializationConfig при сериализации Business . Конечно, это означает, что другие аннотации, которые вы можете использовать, также игнорируются. Не идеально, но вы могли бы найти лучшее решение, надеясь, что это поможет (очевидно).

ObjectMapper mapper = new ObjectMapper();
mapper.getSerializationConfig().disable(Feature.USE_ANNOTATIONS);
0 голосов
/ 03 декабря 2015
@JsonIgnore 

используется для игнорирования свойств, которые вы не хотите преобразовывать в json.

public class UserDocument {

    private long id;

    private String documentUrl;

    @JsonIgnore
    private byte documentType;

    //traditional getters and setters
}

Вывод: это преобразует свойства id и documentUrl, но не преобразует свойство documentType .

{
  "id": 5,
  "document_url": "/0/301115124948.jpg"
}
0 голосов
/ 18 апреля 2013

Да, вы можете сделать это. Все, что вам нужно, это объявить список адресов как временное свойство в вашем бизнес-объекте.

Затем добавьте следующий код в ваш jsonConfig:

jsonConfig.setIgnoreTransientFields(true);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...