忽略Jackon JsonProperty访问以进行单元测试

问题描述 投票:3回答:3

我在我的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访问权限的字段被忽略(出于明显的原因)。因此,在序列化的对象中,我看到publicCertificateprivateCertificate的值为空。

我确实尝试设置mapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY)

还有其他方法可以忽略单元测试的这些属性吗?

我在我的Spring Boot项目中使用Jackson进行序列化/反序列化。我有一个具有以下结构的DTO对象,公共类TestDTO实现了Serializable {private static final ...

java json unit-testing jackson objectmapper
3个回答
3
投票

虽然指定的解决方案有效,但对于要求而言却是过高的。如果您只想覆盖注释,则不需要自定义序列化程序。杰克逊(Jackson)对于此类琐碎的要求有mixin feature


0
投票

这通过为JUnit测试添加自定义序列化程序来解决。


0
投票

这里是一个简单的例子

© www.soinside.com 2019 - 2024. All rights reserved.