有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

在与gradle进行集成测试时,我遇到了一个异常

我得到的例外是:

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;
}

抽象细节如下所示:

@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命令运行同一个集成测试时,它失败了,出现了前面提到的异常。原因可能是什么


共 (1) 个答案