当反序列化JSON字符串时,丢失的属性在不应该是"null“时被设置为”null“。下面是一个POJO类:
@Builder
@Getter
@Setter
@JsonInclude(JsonInclude.Include.NON_NULL)
@NoArgsConstructor
@AllArgsConstructor
@ToString
@EqualsAndHashCode
static class MyPojo {
@JsonProperty(value = "OptionalProp", required = false, defaultValue = "")
@Builder.Default
@Nullable
@JsonSetter(value = "", nulls = Nulls.AS_EMPTY)
private String optionalProp = "";
@JsonProperty(value = "RequiredProp", required = false, defaultValue = "")
@Builder.Default
@Nullable
@JsonSetter(value = "", nulls = Nulls.AS_EMPTY)
private String requiredProp = "";
}用于反序列化的JSON字符串:
{
"RequiredProp" : "test"
}下面是反序列化:
private final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
private final myPojo = OBJECT_MAPPER.readValue(inputStream, MyPojo.class);这是输出:
MyPojo(optionalProp=null, requiredProp=test)但是使用构建器创建POJO:
final MyPojo myPojo = MyPojo.builder()
.requiredProp("test")
.build();其结果如下:
MyPojo(optionalProp=, requiredProp=test)我在用:
Jackson-databind 2.12.x
Jackson-annotation 2.12.x
Jackson-core 2.12.x是否有从这些包中更改行为的小版本?
发布于 2022-06-27 21:20:27
问题来源于隆布克,而不是杰克逊的东西。看一看生成的源代码,您就可以清楚地了解正在发生的事情。使用Builder.Default似乎会导致这个问题,因为它显然会产生混乱的代码,从而删除您已经准备好的初始化。删除注释将恢复正确的行为。
这似乎是Lombok的一个问题,并被记录为这里。删除注释应该会导致正确的行为。
https://stackoverflow.com/questions/72775857
复制相似问题