我有以下课程:
@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"));
当我在parent 2Str类上调用writeValueAsString()方法时,它不会打印父类中的任何属性。
我尝试在抽象类上使用@Jacksonized。但收到错误:
错误:抽象类上的构建器不能被@ Jackson化(构建器将永远不会被使用)。
如何在序列化子类时包含父类中的字段?
1条答案
按热度按时间zbq4xfa01#
此行为与Lombok、
@SuperBuilder
或@Jacksonized
无关。Jackson只是使用toString()
方法序列化map键,因为JSON中的键不能被结构化,而必须是普通字符串。如果使用POJO作为map值,则一切都按预期工作(即使没有
@SuperBuilder
也能正常工作)。@Jacksonized
不会有任何影响,因为它只影响反序列化,而不影响序列化。