使用Jackson使用SuperBuilder序列化抽象类



我有以下类:

@NoArgsConstructor
@AllArgsConstructor
@Data
@SuperBuilder
public abstract class Parent {
private String parentA;
private String parentB;
}
@Data
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
@SuperBuilder
public class ChildOne extends Parent{
private String childOneA;
private String childOneB;
}
@Data
@NoArgsConstructor
@EqualsAndHashCode(callSuper = true)
@SuperBuilder
public class ChildTwo extends Parent{
}
Map<Parent, List<String>> parent2Strs = new HashMap<>();
parent2Strs.put(ChildTwo.builder().parentA("A").parentB("B").build(), List.of("1", "2"));
parent2Strs.put(ChildTwo.builder().parentA("C").parentB("D").build(), List.of("1"));

当我在parent2Str类上调用writeValueAsString()方法时,它不打印父类中的任何属性。

我尝试在抽象类上使用@Jacksonized。但是收到错误:

错误:抽象类上的构造器不能被@Jacksonized(构造器永远不会被使用)。

如何在序列化子类时包含父类中的字段?

此行为与Lombok、@SuperBuilder@Jacksonized无关。Jackson简单地使用toString()方法序列化map键,因为JSON中的键不能结构化,而必须是普通字符串。

如果您使用pojo作为映射值,一切都如预期的那样工作(没有@SuperBuilder也可以工作)。

@Jacksonized无论如何都不会产生影响,因为它只影响反序列化,而不影响序列化。

相关内容

  • 没有找到相关文章

最新更新