序列化和反序列化展平的对象

时间:2019-01-04 21:01:44

标签: java json serialization jackson

我有2个课程:

public class SomeClass {
  private AnotherClass anotherClass;
  private String astring;
}

public class AnotherClass {

   private Date field1;
   private String field2;
}

我需要序列化和反序列化SomeClass的对象,并希望json看起来像

someClass {
  field1: field1Value;
  field2: field2Value;
  astring: astringvalue;
}

即展平AnotherClass中的字段。

我知道我可以使用@JsonUnwrapped注释

  public class SomeClass {
      @JsonUnwrapped
      private AnotherClass anotherClass;
      private String astring;
    }

要完成此操作,但是由于anotherClass出现在许多类中,所以我宁愿避免将注释添加到每个类中。

是否有一种方法可以通过应用到AnotherClass的客户序列化器和反序列化器来实现平坦化?

1 个答案:

答案 0 :(得分:1)

您可以使用mixin将@JsonUnwrapped注释应用于所有类

public abstract class FlattenMixin {

    @JsonUnwrapped
    private AnotherClass anotherClass;

}

然后使用mixinResolver应用于所有类。

    objectMapper.setMixInResolver(new MixInResolver() {

        @Override
        public Class<?> findMixInClassFor(Class<?> cls) {
            // maybe filter to specific package ?
            return FlattenMixin.class;
        }

        @Override
        public MixInResolver copy() {
            return null;
        }
    });