杰克逊:将空字符串反序列化为空字符串

新手上路,请多包涵

我有以下类,由 Jackson 映射(简化版):

 public class POI {
    @JsonProperty("name")
    private String name;
}

在某些情况下,服务器返回 "name": null 然后我想将名称设置为空 Java 字符串。

是否有任何 Jackson 注释,或者如果属性为 null 我是否应该只检查我的 getter 中的 null 并返回空字符串?

原文由 syntagma 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 581
2 个回答

您可以在默认构造函数中设置它,也可以在声明中设置它:

 public class POI {
    @JsonProperty("name")
    private String name;

    public POI() {
        name = "";
    }
}

或者

public class POI {
    @JsonProperty("name")
    private String name = "";
}

原文由 jcklie 发布,翻译遵循 CC BY-SA 3.0 许可协议

Jackson 2.9 实际上提供了一个尚未提及的新机制:使用 @JsonSetter 用于属性,及其等效的“Config Overrides”用于类型 String.class 。更长的解释包含在

https://medium.com/@cowtowncoder/jackson-2-9-features-b2a19029e9ff

但要点是您可以像这样标记字段(或设置器):

 @JsonSetter(nulls=Nulls.AS_EMPTY) public String stringValue;

或者将映射器配置为对所有 String 值属性执行相同操作:

 mapper.configOverride(String.class)
 .setSetterInfo(JsonSetter.Value.forValueNulls(Nulls.AS_EMPTY));

两者都会将传入的 null 转换为空值,对于字符串为“”。

这也适用于预期的 Collection s 和 Map s。

原文由 StaxMan 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题