JSON 解析运行时类型的绑定反序列化错误

JSON binding deserialization error resolving runtime type

我正在尝试让 restful API 在提供 JSON 对象时选择正确的 class。

考虑以下 classes:

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 项目),我尝试使用具有抽象 class 继承、接口实现和通用 classes 的 Jackson 注释进行反序列化,但没有任何效果。我得到了以下代码,当提供 { "genre": "comic", "title": "foobar" } 作为输入时,我希望它是 return 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 Binding deserialization error: javax.json.bind.JsonbException: Error resolving runtime type for type: T

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

avax.ws.rs.ProcessingException: RESTEASY008200: JSON Binding deserialization error: javax.json.bind.JsonbException: Can't create instance

我错过了什么?

我是 运行 通过 FWIW 的 Quarkus 应用程序。

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