如何解决CsvMapper 将空字段序列化为文字 null
我希望 CsvMapper 将空实例字段映射为字面空值(如 Desired Output 中所示)。例如:
public class Main {
public static void main(String[] args) throws JsonProcessingException {
CsvMapper mapper = new CsvMapper();
CsvSchema schema = mapper.schemaFor(Pojo.class);
ObjectWriter writer = mapper.writer(schema.withUseHeader(true));
Pojo pojo = new Pojo();
pojo.setFirstName("John");
pojo.setLastName(null);
String csv = writer.writeValueAsString(pojo);
System.out.println(csv);
}
@Data
public static class Pojo {
private String firstName;
private String lastName;
}
}
实际输出
firstName,lastName
John,
期望输出
firstName,null
解决方法
对 CsvMapper
代码进行了一些挖掘,发现它使用了 DefaultSerializerProvider
。
因此我用自定义的 JsonSerializer
public class CustomNullSerializer extends JsonSerializer<Object> {
public void serialize(Object value,JsonGenerator jgen,SerializerProvider provider) throws IOException {
jgen.writeString("null");
}
}
然后修改了CsvMapper
CsvMapper mapper = new CsvMapper();
DefaultSerializerProvider.Impl sp = new DefaultSerializerProvider.Impl();
sp.setNullValueSerializer(new CustomNullSerializer());
mapper.setSerializerProvider(sp);
,
找到更好的答案
CsvSchema schema = mapper.schemaFor(Pojo.class).withNullValue("null");
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。