Джексон - подавление сериализации (записи) свойств динамически - PullRequest
10 голосов
/ 05 июня 2010

Я пытаюсь преобразовать Java-объект в JSON-объект в Tomcat / jersey, используя Джексона. И хочу динамически подавлять сериализацию (запись) определенных свойств.

Я могу использовать JsonIgnore, но я хочу принять решение игнорировать во время выполнения. Есть идеи ??

Итак, в качестве примера ниже, я хочу подавить поле «id» при сериализации объекта User в JSON.

new ObjectMapper.writeValueAsString(user);


class User {

private String id = null;
private String firstName = null;
private String lastName = null;

//getters
//setters

}//end class

Ответы [ 4 ]

4 голосов
/ 12 декабря 2010

Да, JSON View - это путь.

Если вы, например, необходимо разрешить клиенту решать, какие поля маршалировать, этот пример может помочь: http://svn.codehaus.org/jackson/tags/1.6/1.6.3/src/sample/CustomSerializationView.java

2 голосов
/ 05 июня 2010

Чек

ObjectMapper.configure(SerialiationJson.Feature f, boolean value)

и

org.codehaus.jackson.annotate.JsonIgnore 

аннотация

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

0 голосов
/ 15 июня 2010

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

0 голосов
/ 05 июня 2010

Я не вижу никакого способа сделать это. Если вам нужно динамически решить, какие свойства маршалируются, то я предлагаю вам вручную создать Map ключей для значений ваших объектов, а затем передать это Map Джексону, а не передавать объект User напрямую.

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