我在我的Spring Boot项目中使用Jackson进行序列化/反序列化。
我有一个具有以下结构的DTO对象,
public class TestDTO implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
@JsonProperty(access = JsonProperty.Access.READ_ONLY)
private UUID certificateId;
@NotNull
private Long orgId;
@NotNull
private CertificateType certificateType;
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
@Valid
@NotNull
private PublicCertificateDTO publicCertificate;
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
@Valid
private PrivateCertificateDTO privateCertificate;
@JsonProperty(access = JsonProperty.Access.READ_ONLY)
private ZonedDateTime expiryDate;
@JsonProperty(access = JsonProperty.Access.READ_ONLY)
private ZonedDateTime createdDate;
@JsonProperty(access = JsonProperty.Access.READ_ONLY)
private ZonedDateTime updatedDate;
}
在我的单元测试中,使用以下方法对该对象进行序列化,
public static byte[] convertObjectToJsonBytes(TestDTO object)
throws IOException {
ObjectMapper mapper = new ObjectMapper();
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
JavaTimeModule module = new JavaTimeModule();
mapper.registerModule(module);
return mapper.writeValueAsBytes(object);
}
导致具有WRITE_ONLY
访问权限的字段被忽略(出于明显的原因)。因此,在序列化的对象中,我看到publicCertificate
和privateCertificate
的值为空。
我确实尝试设置mapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY)
还有其他方法可以忽略单元测试的这些属性吗?
我在我的Spring Boot项目中使用Jackson进行序列化/反序列化。我有一个具有以下结构的DTO对象,公共类TestDTO实现了Serializable {private static final ...
虽然指定的解决方案有效,但对于要求而言却是过高的。如果您只想覆盖注释,则不需要自定义序列化程序。杰克逊(Jackson)对于此类琐碎的要求有mixin feature
这通过为JUnit测试添加自定义序列化程序来解决。
这里是一个简单的例子