【问题标题】:How can I resolve jackson deserialization error while using java.util.List?使用 java.util.List 时如何解决 jackson 反序列化错误?
【发布时间】:2022-12-13 23:29:14
【问题描述】:

我面临以下错误:

com.fasterxml.jackson.databind.exc.InvalidTypeIdException: Could not resolve type id 'accounts' as a subtype of `java.util.List<Account>`: no such class found at [Source: (StringReader); line: 48, column: 11] (through reference chain: >Partner["accounts"])

在使用 XmlMapper 时。我该如何解决?

到目前为止,这是我的尝试:

@JsonIdentityInfo(
        generator = ObjectIdGenerators.PropertyGenerator.class,
        property = "databaseId")
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type")
@JsonSubTypes({
        @JsonSubTypes.Type(value = java.util.List.class, name = "accounts")
})
public class Partner{
private List<Account> accounts;
@JsonManagedReference
    public void setAccounts(List<Account> accounts) {
        this.accounts = accounts;
    }}


这些是我的映射器配置:

mapper.activateDefaultTyping(mapper.getPolymorphicTypeValidator(),ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.WRAPPER_OBJECT);
mapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY);
mapper.configure(SerializationFeature.INDENT_OUTPUT, true);
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS z");
df.setTimeZone(TimeZone.getTimeZone("UTC"));
mapper.setDateFormat(df);
mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);

【问题讨论】:

    标签: java deserialization jackson-dataformat-xml


    【解决方案1】:

    为了修复此错误,您需要确保正确指定了“accounts”字段的类型。您可以使用 @JsonTypeInfo 和 @JsonSubTypes 注释指定它。 @JsonTypeInfo 注释将告诉 Jackson “accounts” 字段是什么类型的对象,而 @JsonSubTypes 注释将指定 “accounts” 字段的类类型。我会尝试将这些注释添加到 Partner 类中,如下所示:

    @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property="type") 
    @JsonSubTypes({ 
     @JsonSubTypes.Type(value = Account.class
    

    使用@JsonTypeInfo 注解,您可以通过将属性参数设置为“type”来指定“accounts”字段的类型。 @JsonSubTypes 注释指定“accounts”字段使用值参数的对象类型,在本例中为 Account 类。这将告诉 Jackson “accounts” 字段的类型,以便它知道如何序列化和反序列化它。

    也许这有帮助。

    【讨论】:

    • 我已经试过了。它不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-18
    • 1970-01-01
    • 2012-02-23
    • 2015-05-20
    • 1970-01-01
    • 1970-01-01
    • 2019-07-28
    相关资源
    最近更新 更多