java - jackson 无法将空字符串值转换为枚举

标签 java json jackson2

我正在寻找 Jackson (2.8) 的便捷解决方案,以在反序列化之前/期间过滤掉指向空字符串值的字段:

@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class Guis {

public enum Context {
    SDS,
    NAVIGATION
}

public enum Layer {
    Library,
    Status,
    Drivingdata
}

// client code

 String s = "{\"context\":\"\",\"layer\":\"Drivingdata\"}";
 ObjectMapper mapper = new ObjectMapper();
 Guis o = mapper.readValue(s, Guis.class);

错误

 Exception in thread "main" com.fasterxml.jackson.databind.exc.InvalidFormatException: Can not deserialize value of type cq.speech.rsi.api.Guis$Context from String "": value not one of declared Enum instance names: [SDS NAVIGATION] at [Source: {"context":"","layer":"Drivingdata"}; line: 1, column: 12] (through reference chain: cq.speech.rsi.api.Guis["context"])

我还尝试了什么... 啊这个

mapper.getDeserializationConfig().with(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT);

错误仍然存​​在,显然甚至谷歌搜索也无济于事......

编辑

set DeserializationFeature 不像上面举例的那样工作。对我来说,解决方案最终是添加这个片段:

 mapper.configure(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL, true)

最佳答案

您可以为映射器启用 DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL,默认情况下禁用。唯一需要注意的是使用它,它将把所有未知的包括空字符串都视为枚举的 null。

关于java - jackson 无法将空字符串值转换为枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51406816/

相关文章:

java - 如何在应用程序启动时调用 AIDL 服务

java - 使用 ObjectId 函数将 JSON 反序列化为 Map<String, Object>

javascript - 为什么此 Twitter 标准搜索 JSON 响应中没有 'urls' 值?

java - 具有完整 POJO 数据绑定(bind)的 Jackson 自定义过滤器

java - ScheduledExecutorService 或 ScheduledThreadPoolExecutor

java - 如何在java中获取jsoup中输入字段的值?

java - Java中显示远程系统进程列表的库或jar

javascript - Object.defineProperty 是否检查属性是否已定义?

jax-rs - 如何在 Payara 5 中使用 Jackson 2?

Jackson 私有(private)构造函数、JDK 9+、Lombok