【问题标题】:JSON binding deserialization error resolving runtime typeJSON绑定反序列化错误解析运行时类型
【发布时间】:2020-07-06 11:41:54
【问题描述】:

我试图让一个安静的 API 在提供 JSON 对象时选择正确的类。

考虑以下类:

package org.acme.validation.model;

import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.annotation.JsonSubTypes;

@JsonTypeInfo(use=JsonTypeInfo.Id.NAME, include=JsonTypeInfo.As.PROPERTY, property="genre")
@JsonSubTypes({@JsonSubTypes.Type(value=Comic.class, name="comic")})
public class Book {

    public String genre;

    public String getTitle() {
        return "lolwut";
    }
}
package org.acme.validation.model;

import com.fasterxml.jackson.annotation.JsonTypeName;

@JsonTypeName("comic")
public class Comic extends Book {

    public String title;

    public String getTitle() {
        return this.title;
    }
}

经过多次阅读(这是我的第一个 Java 项目),我尝试使用带有抽象类继承、接口实现和泛型类的 Jackson 注释反序列化,但没有任何效果。我想出了以下代码,当提供{ "genre": "comic", "title": "foobar" } 作为输入时,我希望返回foobar

package org.acme.validation.resource;

import org.acme.validation.model.Book;

import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Consumes;
import javax.ws.rs.core.MediaType;

@Path("/books")
public class BookResource {

    @POST
    @Consumes(MediaType.APPLICATION_JSON)
    public <T extends Book> String foobar(T book) {
            return book.getTitle();
    }
}

但我得到的只是

javax.ws.rs.ProcessingException:RESTEASY008200:JSON 绑定反序列化错误:javax.json.bind.JsonbException:解析运行时类型时出错类型:T

当我尝试抽象类继承时,我得到了

avax.ws.rs.ProcessingException:RESTEASY008200:JSON 绑定反序列化错误:javax.json.bind.JsonbException:无法创建实例

我错过了什么?

我正在通过 Quarkus,FWIW 运行应用程序。

【问题讨论】:

标签: java jackson jax-rs json-deserialization quarkus


【解决方案1】:

我收到这些错误是因为 Jackson 与 JSON-B 冲突:我试图使用 Jackson 注释,但 pom.xml 包含 JSON-B 作为依赖项。我只需要在pom.xml 中将quarkus-resteasy-jsonb 替换为quarkus-resteasy-jackson,一切(泛型类、抽象类继承、接口实现)都按预期工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-02
    • 2018-12-26
    • 2020-07-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多