当前位置: 首页 > 知识库问答 >
问题:

在将Json反序列化为Java对象的过程中,如何跳过对枚举使用@JsonCreator?

徐焱
2023-03-14

一个枚举类,ColorName是使用来自ColorName json文件的jsonSchema2pojo生成的。因此,默认情况下,Enum类默认使用@JsonCreator注释的fromValue方法。

@JsonCreator
public static ColorName fromValue(String value) {
    ColorName constant = constants.get(value);
    if (constant == null) {
        throw new IllegalArgumentException(value);
    } else {
        return constant;
    }
}

如果这个类用于反序列化json字符串到Java对象,如果有一个新的/错误的Enum值在json中传递,那么反序列化失败与IllegalArgumentException()当试图避免这个错误使用下面,它不工作

ObjectMapper om=new ObjectMapper();om.configure(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL, true);

问题似乎是因为@JsonCreator一直受到尊重。是否有方法指示反序列化程序跳过此项或忽略未知枚举值?

共有1个答案

姬雪松
2023-03-14

从https://github.com/FasterXML/jackson-databind/pull/1642/files开始,杰克逊图书馆本身的变化已经解决了这个问题

根据https://github.com/FasterXML/jackson-databind/pull/1642它已经被反向移植到杰克逊2.8.9,所以试着升级到那个。

 类似资料:
  • 问题内容: 我在Android上的Java中具有以下枚举,并且我希望能够将传入的JSON字符串/对象中的整数反序列化为此Enum类型。我一直在Jackson和GSON上受到欢迎,但在我正在使用的JSON.org包上却什么也没有。 有没有简单的方法可以做到这一点,或者我需要更改JSON解码器?谢谢。 问题答案: 将返回您的数组,然后可以遍历数组并检查

  • 我在Android上的Java中有以下枚举,我希望能够将传入的JSON字符串/对象中的整数反序列化为该枚举类型。我在杰克逊和GSON上得到了点击,但在json.org包上没有,我正在使用。 是否有一个简单的方法来做到这一点,或者我需要改变JSON解码器?谢了。

  • 本文向大家介绍如何在Java中使用flexjson将JSON反序列化为Java对象?,包括了如何在Java中使用flexjson将JSON反序列化为Java对象?的使用技巧和注意事项,需要的朋友参考一下 该Flexjson 是一个轻量级 的库序列化 和反序列化 Java对象和从JSON格式允许两个对象的深与浅拷贝。为了使用flexjon运行Java程序,我们需要导入一个flexjson 包。我们可

  • 有没有办法将一般对象序列化为Json并将Json反序列化为对象<如果对象是一个实体,我可以使用Jackson 2库来实现这个目的<但是如果对象是一个普通类,我该怎么做呢? 例如,我想序列化com.datastax.driver.core.querybuilder。将更新为Json并保存到DB,然后搜索并反序列化它以更新对象,最后将其用作com.datastax.driver.core.Sessio

  • 我有一个具有名称字段的界面,如下所示: 然后我会得到HTTP 400错误请求错误代码,其中包含以下异常日志: 抽象类型只能用附加类型信息实例化 模块的层次结构是模块B依赖于模块a。我尝试使用@JsonTypeInfo,但模块之间的依赖关系是一个限制,不允许我在@JsonSubtypes注释中为类C中的字段f使用BField.class。

  • 问题内容: 我的JSON有点弱,所以我需要一些帮助。 我正在尝试反序列化用户的JSON: 放入我用属性装饰的对象中: 我得到以下异常: Newtonsoft.Json.JsonSerializationException:在JSON中找不到必需的属性’user_id’。 这是因为JSON对象是一个数组吗?如果是这样,如何将其反序列化为一个User对象? 提前致谢! 问题答案: 正如Alexandr