java Jackson反序列化将空值映射为空字符串
我试图为所有json Map<String, String>
找到一个全局ObjectMapper
配置(或任何其他定制),以便反序列化到没有null
值的映射中(应该有一个空字符串)
例如
class MyClass {
Map<String, String> dict;
String str;
public MyClass() {
}
public MyClass(Map<String, String> dict, String str) {
this.dict = dict;
this.str = str;
}
public Map<String, String> getDict() {
return dict;
}
public String getStr() {
return str;
}
}
...
final Map<String, String> dict = new HashMap<>();
dict.put("k1", "v1");
dict.put("k2", null);
final MyClass myClass = new MyClass(dict);
final String valueAsString = objectMapper.writeValueAsString(myClass);
final MyClass deserialized = objectMapper.readValue(valueAsString, MyClass.class);
deserialized.getDict().get("k2"); // = "" (empty String)
deserialized.getStr(); // = null
我知道我可以通过用@JsonDeserialize(using = MyDeserializer.class)
注释我的类来实现每个POJO
但我希望它对所有地图都有效
我还试图调整这个solution来实现反序列化,但它抛出NullPointerException
更新:“null到empty”转换只需要在映射上工作(使用字符串值)。(见上面更新的示例)
# 1 楼答案
看,这对我有用:
# 2 楼答案
我最终使用了反序列化修改器技术,如下所示: