2016-07-12 6 views
0

Я сериализую POJO с помощью jackosn, и я хочу, чтобы все значения, для которых пользователь задает какое-либо значение независимо от того, является ли оно нулевым или нет, должны быть включены в сериализацию.Jackson включает null, установленный пользователем?

Так в настоящее время:

POJO:

public class YourItem { 
    public String key; 
    public String item; 
} 

В настоящее время, когда пользователь делает:

YourItem item = new YourItem(); 
item.setKey("abc"); 

сериализации дает:

{ 

     "key" : "abc" 
} 

, как я настроил ObjectMapper as objectMapper.setInclude(Include.NON_NULL)

Однако теперь, если пользователь специально вызывает setter и устанавливает значение как null, тогда я хочу этот элемент в своей сериализованной строке. Так что если пользователь делает

YourItem item = new YourItem(); 
    item.setKey("abc"); 
    item.setItem(null); 

Я хочу в serialzation оба ключа и пункт значения присутствуют как:

{ 

    "key" : "abc", 
    "item" : null 

} 

Как разграничить между установлен нулевой пользователя и нуль по умолчанию. Есть ли конфигурация в ObjectMapper ??

+0

Здесь, конечно, есть дубликат, но попробуйте 'NON_DEFAULT'. –

+0

@SotiriosDelimanolis: Я пробовал 'NON_DEFAULT', но это не имеет значения. Значение null, заданное пользователем, опущено –

+0

Разве это не то, что вы хотели? –

ответ

1

Некоторые люди считают, используя нулевой быть плохой практикой (Книга Чистый код, например)

Игнорирование, что вы не можете различать инициализации по умолчанию нулевой и установленные пользователем нулевой по языку-дизайн

Вам нужно какое-то состояние, которое отслеживает, было ли доступно поле установщиком. Если он не был вызван сеттером и имеет значение null, игнорируйте его.

Один из способов сделать это Джексон Filters, который позволяет определить различные условия для сериализации поля во время выполнения (ваше состояние в том, что ваш сеттер-доступа состояние указывает на то, что поле было установлено пользователем)

http://www.baeldung.com/jackson-serialize-field-custom-criteria

Смежные вопросы