Jackson 2.8 中有没有办法将空值序列化为空字符串
Is there a way in Jackson 2.8 to serialize nulls to empty string
我想序列化按类型遇到的空值,例如空字符串 ""
,布尔值 false
,对象 "{}"
。
我在这里尝试遵循 Jackson 文档:https://github.com/FasterXML/jackson-docs/wiki/JacksonHowToCustomSerializers 但似乎在 2.8 中没有 StdSerializerProvider。
由于这不起作用,我尝试使用 @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);
}
}
但是,我注意到当对象为 null 时,它从不尝试处理 null 值。 Jackson 2.8 中有没有一种方法可以指定覆盖以序列化空值?
查看文档后,我发现 Jackson 在 JsonSerialize 中使用了 nullsUsing 参数。例如:
@JsonSerialize(nullsUsing = NullMapSerializer.class)
private Map<String, String> map;
我这样定义了不同的序列化程序:
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);
}
}
这会将字段序列化为 {}、[] 或 "",只要值为 null,否则通常为空。
如果你想对任何对象有一个通用的方法,可以使用以下方法:
public class NullObjectSerializer extends JsonSerializer<Object> {
@Override
public void serialize(Object action, JsonGenerator generator, SerializerProvider provider) throws IOException {
generator.writeString(StringUtils.EMPTY);
}
}
字段将被标记为:
@JsonSerialize(nullsUsing = NullObjectSerializer.class)
private MyEnum enumField;
我想序列化按类型遇到的空值,例如空字符串 ""
,布尔值 false
,对象 "{}"
。
我在这里尝试遵循 Jackson 文档:https://github.com/FasterXML/jackson-docs/wiki/JacksonHowToCustomSerializers 但似乎在 2.8 中没有 StdSerializerProvider。
由于这不起作用,我尝试使用 @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);
}
}
但是,我注意到当对象为 null 时,它从不尝试处理 null 值。 Jackson 2.8 中有没有一种方法可以指定覆盖以序列化空值?
查看文档后,我发现 Jackson 在 JsonSerialize 中使用了 nullsUsing 参数。例如:
@JsonSerialize(nullsUsing = NullMapSerializer.class)
private Map<String, String> map;
我这样定义了不同的序列化程序:
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);
}
}
这会将字段序列化为 {}、[] 或 "",只要值为 null,否则通常为空。
如果你想对任何对象有一个通用的方法,可以使用以下方法:
public class NullObjectSerializer extends JsonSerializer<Object> {
@Override
public void serialize(Object action, JsonGenerator generator, SerializerProvider provider) throws IOException {
generator.writeString(StringUtils.EMPTY);
}
}
字段将被标记为:
@JsonSerialize(nullsUsing = NullObjectSerializer.class)
private MyEnum enumField;