gpt4 book ai didi

java - 使用 gradle 运行时 Jackson 子类型反序列化失败

转载 作者:太空宇宙 更新时间:2023-11-04 09:50:09 26 4
gpt4 key购买 nike

我在使用 gradle 运行集成测试时遇到异常。

我得到的异常(exception)是:

com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of AbstractCommonDetails: abstract types either need to be mapped to concrete types, have custom deserializer, or contain additional type information

Summary 类对我尝试反序列化的详细信息有以下注释:

@Data
public class Summary {
@JsonTypeInfo(use = NAME, include = PROPERTY, property = "@type")
@JsonSubTypes({
@JsonSubTypes.Type(value = CardDetails.class, name = "CARD")
})
private AbstractCommonDetails details;
}

AbstractCommonDetails 看起来像这样:

@Getter
@Setter
public abstract class AbstractCommonDetails {
private Long id;
public abstract String getPaymentMethod();
}

CardDetails 具有 @JsonTypeName("CARD")@Data 注释以及 getPaymentMethod 方法的实现。

ObjectMapper配置和反序列化如下:

new ObjectMapper().findAndRegisterModules().readValue(IOUtils.toString(inputStream, "UTF-8"), Summary.class);

和示例 json:

{
"details":{
"@type":"CARD",
"amount":"10.00"
}

奇怪的是 - 作为 Junit 测试运行集成测试会成功,但是当使用 gradlew test 命令运行相同的集成测试时,它会失败并出现前面提到的异常。可能是什么原因?

最佳答案

如果测试在 IDE 上运行,但不适用于 gradle,则意味着您需要查看 gradle 配置。您使用 Lambook,因此您需要确保 gradle 配置了解 Lambok 注释。

另请参阅:

关于java - 使用 gradle 运行时 Jackson 子类型反序列化失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54866861/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com