当反序列化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)
但使用builder创建POJO:
final MyPojo myPojo = MyPojo.builder()
.requiredProp("test")
.build();
导致以下POJO:
MyPojo(optionalProp=, requiredProp=test)
我正在使用:
Jackson-databind 2.12.x
Jackson-annotation 2.12.x
Jackson-core 2.12.x
这些软件包中是否有微小的版本更改会改变行为?