当前位置: 首页 > 面试题库 >

如何使用Jackson json注释枚举字段以进行反序列化

鲜于谦
2023-03-14
问题内容

我正在杰克逊1.6.2中使用REST Web服务/ ApacheWink。我如何注释枚举字段,以便Jackson对其进行反序列化?

内部阶层

public enum BooleanField
{
    BOOLEAN_TRUE        { public String value() { return "1";} },
    BOOLEAN_FALSE       { public String value() { return "0";} },
Java Bean /请求对象
BooleanField locked;
public BooleanField getLocked() {return locked;}

Jackson的文档指出可以通过@JsonValue/来做到这一点,@JsonCreator但没有提供示例。

是否有人愿意像往常一样洒(java)bean


问题答案:

如果您使用的是Jackson 1.9,则可以通过以下方式完成序列化:

public enum BooleanField {
   BOOLEAN_TRUE("1")
   ;

   // either add @JsonValue here (if you don't need getter)
   private final String value;

   private BooleanField(String value) { this.value = value; }

   // or here
   @JsonValue public String value() { return value; }

因此,您需要进行的更改是向Enum类型本身添加方法,因此所有值都具有该方法。不知道它是否适用于子类型。

对于@JsonCreator,使用静态工厂方法可以做到;因此添加如下内容:

@JsonCreator
public static BooleanField forValue(String v) { ... }

Jackson 2.0实际上将支持将@JsonValue两者同时使用,包括反序列化。



 类似资料:
  • 我有JSON反序列化和映射到枚举的问题。我从外部API获取JSON,类似于下面两个例子: 我想将空值映射到一些默认的枚举值。 模型对象 和枚举类 对于exists,值模型类包含正确的枚举,但如果我从API获取< code>null,它在模型中仍然是< code>null。 我试图创建一些由< code>@JsonCreator注释的方法,使用< code > @ JsonEnumDefaultVa

  • 我正在使用maven-jaxb2-plugin和jaxb2-basics-annotate插件从我的xsd自动生成POJO。我已经成功地在POJO中生成了注释。我需要将注释应用于枚举中的方法,但不知道如何做到这一点。 xsd有, 生成的文件 我需要的是在上面的value方法中添加JsonValue注释。 我尝试了以下和其他一些调整,但在绑定。xjb什么都不起作用。 有什么叫做annotateEnu

  • 问题内容: 我需要以一种特定的方式配置Jackson,以下将对其进行描述。 带注释的字段仅使用其ID进行序列化: 如果该字段是普通对象,请对其序列化 如果该字段是对象的集合,请序列化一个数组 带注释的字段的属性名称以不同的顺序进行序列化: 如果该字段是普通对象,请在属性名称后添加后缀 如果该字段是对象的集合,请在属性名称后添加后缀 对于注释,我想这样的自定义,最好有一个可选的值来覆盖名字就像做 用

  • 问题内容: 我正在尝试并且未能对Jackson 2.5.4的枚举进行反序列化,并且我不太清楚我的情况。我的输入字符串是驼峰式的,我想简单地映射到标准的Enum约定。 我也尝试了吸气剂,但没有成功,这是我在其他地方看到的一种选择。他们都炸毁了: 我究竟做错了什么? 问题答案: 编辑: 从Jackson 2.6开始,您可以在枚举的每个元素上使用以指定其序列化/反序列化值(请参见此处): (此答案的其余

  • 我的JSON如下所示: 我的课程如下所示: 如何反序列化到映射如和到

  • 我需要序列化/反序列化特定枚举: 我有个例外: 我如何通过GSON序列化/反序列化它?