Siddharth Trikha
Siddharth Trikha

Reputation: 2506

Jackson include null set by user?

I am serializing a POJO using jackosn, and I want that all the values for which the user sets some value irrespective whether it's null or not must be included in the serialization.

So currently:

POJO:

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

Currently when user does:

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

The serialization gives:

{

        "key" : "abc"
}

as I configured ObjectMapper as objectMapper.setInclude(Include.NON_NULL)

However now if the user specifically calls the setter and sets the value as null, then I want that item in my serialized string. So if user does

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

I want in serialzation both key and item values are present like:

{

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

}

How do I differentiate between the user set null and the default null. Is there a configuration in ObjectMapper ??

Upvotes: 0

Views: 522

Answers (1)

nihab
nihab

Reputation: 56

Some people consider using null to be bad practice (The book Clean Code, for instance)

Disregarding that, you cannot differentiate between the default initialization null and a user-set null by language-design

You need some sort of state that tracks if a field has been accessed by a setter. If it hasn't been accessed by a setter and is null, ignore it.

One way to do this is Jackson Filters, which allows you to define various conditions for serializing a field during runtime (your condition being that your setter-access-state indicates that the field was set by a user)

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

Upvotes: 1

Related Questions