小编spa*_*kit的帖子

使用 JSON-B / Yasson 将 JSON 反序列化为多态 POJO

我在资源类中有一个 PATCH 端点,其中一个抽象类作为请求主体。我收到以下错误:

22:59:30 SEVERE [or.ec.ya.in.Unmarshaller] (on Line: 64) (executor-thread-63) Can't create instance
Run Code Online (Sandbox Code Playgroud)

似乎因为我声明为参数的身体模型是抽象的,所以它无法反序列化。

我期待得到 Element_A 或 Element_B

如何声明主体是多态的?

这是元素层次结构

public abstract class BaseElement {
    public String name;
    public Timestamp start;
    public Timestamp end;
}

public class Element_A extends BaseElement{
    public String A_data;
}

public class Element_B extends BaseElement{
    public long B_data;
}
Run Code Online (Sandbox Code Playgroud)

这是我的端点的资源类

@Path("/myEndpoint")
public class ResourceClass {

    @PATCH
    @Path("/{id}")
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.TEXT_PLAIN)
    public Response updateEvent(@Valid BaseElement element, @Context UriInfo uriInfo, @PathParam long id) {
        if (element instanceof Element_A) { …
Run Code Online (Sandbox Code Playgroud)

java resteasy jsonb-api yasson quarkus

4
推荐指数
1
解决办法
650
查看次数

标签 统计

java ×1

jsonb-api ×1

quarkus ×1

resteasy ×1

yasson ×1