Java Jackson 2:无法解析类型id';C';作为“test.protocol.StatusEventObject”的子类型

Java Jackson 2:无法解析类型id';C';作为“test.protocol.StatusEventObject”的子类型,java,json,jackson2,Java,Json,Jackson2,获取标题上显示的异常。 为什么Jackson 2库假设类型ID“C”是StatusEventObject的子类,因为我声明它是事件注释上的事件的子类 这些是课程 @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "ev") @JsonSubTypes({ @JsonSubTypes.Type(value = ForexQuoteObject.class, nam

获取标题上显示的异常。 为什么Jackson 2库假设类型ID“C”是StatusEventObject的子类,因为我声明它是事件注释上的事件的子类

这些是课程

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "ev")
@JsonSubTypes({
    @JsonSubTypes.Type(value = ForexQuoteObject.class, name = "C"),
    @JsonSubTypes.Type(value = StatusEventObject.class, name = "status")

    }
)
public abstract class Event {

    protected String ev;

    public Event() {

    }

    public Event(String ev) {

        this.ev=ev;
    }

    public String getEv() {
        return ev;
    }

    public void setEv(String ev) {
        this.ev = ev;
    }


}


@JsonTypeName("status")
public  class StatusEventObject extends Event{

    private String status;
    private String message;


    public StatusEventObject() {

    }

    public StatusEventObject(String ev, String status, String message) {

        super(ev);
        this.status=status;
        this.message=message;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    @Override
    public String toString() {

        return "ev: "+ev+"\nstatus: "+status+"\nmessage: "+message;
    }
}


@JsonTypeName("C")
public class ForexQuoteObject extends Event{

    private String p;       //fx pair
    private int x;          //fx exchange ID
    private double a;       //bid
    private double b;       //ask
    private long t;         //unixtime MS

    public ForexQuoteObject() {

    }

    public ForexQuoteObject(String ev, String p, int x, double a, double b, long t) {

        super(ev);
        this.p=p;
        this.x=x;
        this.a=a;
        this.b=b;
        this.t=t;
    }

    public String getP() {
        return p;
    }

    public void setP(String p) {
        this.p = p;
    }

    public int getX() {
        return x;
    }

    public void setX(int x) {
        this.x = x;
    }

    public double getA() {
        return a;
    }

    public void setA(double a) {
        this.a = a;
    }

    public double getB() {
        return b;
    }

    public void setB(double b) {
        this.b = b;
    }

    public long getT() {
        return t;
    }

    public void setT(long t) {
        this.t = t;
    }
}
这里有两个应该反序列化的JSON示例

[{"ev":"status","status":"connected","message":"Connected Successfully"}]
[{"ev":"C","p":"GBP/USD","x":48,"a":1.24973,"b":1.24953,"t":1588361055000}]
下面是我请求反序列化的方式(“message”是JSON)


您应该使用基类-
Event
,而不是子类-
StatusEventObject

mapper.readValue(jsonFile, Event[].class)

为什么要使用
mapper.readValue(message,StatusEventObject[].class)
。您应该使用:
mapper.readValue(jsonFile,Event[].class)
来代替。您是对的,我错过了它。谢谢你,迈克。
mapper.readValue(jsonFile, Event[].class)