Reputation: 1547
I want to serialize nulls encountered by type, e.g. null strings as ""
, Boolean to false
, and objects to "{}"
.
I tried following Jackson documentation here: https://github.com/FasterXML/jackson-docs/wiki/JacksonHowToCustomSerializers but it seems that in 2.8 there is no StdSerializerProvider.
Since that isn't working I tried to define custom serializers with @JsonSerialize(using = StringSerializer.class)
.
@Override
public void serialize(
final String value,
final JsonGenerator jsonGenerator,
final SerializerProvider serializerProvider
) throws IOException {
if(value == null) {
jsonGenerator.writeString(StringUtils.EMPTY);
} else {
jsonGenerator.writeString(value);
}
}
However, I notice that when the object is null it never tries to process null values. Is there a way in Jackson 2.8 to specify overrides for serializing null values?
Upvotes: 0
Views: 4010
Reputation: 1261
If you want to have a general method for any object, there can be used the following:
public class NullObjectSerializer extends JsonSerializer<Object> {
@Override
public void serialize(Object action, JsonGenerator generator, SerializerProvider provider) throws IOException {
generator.writeString(StringUtils.EMPTY);
}
}
And the field will be marked:
@JsonSerialize(nullsUsing = NullObjectSerializer.class)
private MyEnum enumField;
Upvotes: 1
Reputation: 1547
After looking through documentation I found that Jackson uses nullsUsing parameter in JsonSerialize. So for example:
@JsonSerialize(nullsUsing = NullMapSerializer.class)
private Map<String, String> map;
I defined different serializers like so:
public class NullMapSerializer extends JsonSerializer<Map> {
@Override
public void serialize(
final Map value,
final JsonGenerator jsonGenerator,
final SerializerProvider serializerProvider
) throws IOException {
jsonGenerator.writeStartObject();
jsonGenerator.writeEndObject();
}
}
public class NullListSerializer extends JsonSerializer<List> {
@Override
public void serialize(
final List list,
final JsonGenerator jsonGenerator,
final SerializerProvider serializerProvider
) throws IOException {
jsonGenerator.writeStartArray();
jsonGenerator.writeEndArray();
}
}
public class NullStringSerializer extends JsonSerializer<String> {
@Override
public void serialize(
final String value,
final JsonGenerator jsonGenerator,
final SerializerProvider serializerProvider
) throws IOException {
jsonGenerator.writeString(StringUtils.EMPTY);
}
}
This serializes fields into {}, [], or "" whenever values are null, and normally otherwise.
Upvotes: 5