杰克逊处理界面

时间:2015-07-16 16:07:04

标签: java json interface jackson

我正在使用Jackson来序列化/反序列化将存储在数据库中的有效负载。我在弄清楚如何处理接口方面遇到了一些麻烦。我正在尝试序列化下面的Request类,但我得到的错误是杰克逊无法序列化抽象类。如何正确地序列化/反序列化此有效负载?如果可能的话,我想避免自己修改类。感谢。

public interface myInterface {
    public Obj1 getObj1();
    public void setObj1(Obj1 Obj);
    public String getState();
    public void setState(String state);
} 

// Serializing this class
public class Request {
    private myInterface myInt;
    private String message;
    private String requestId;

    public Request(String message, myInterface int) {
        this.message = message;
        this.myInt = int;
    }

    public Request(String requestID, myInterface int) {
        this.requestId = requestID;
        this.myInt = int;
    }

    public String getMessage() {
        return message;
    }

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

    public VipNGEntity getMyInt() {
        return myInt;
    }

    public void myInt(myInterface myInt) {
        this.myInt = myInt;
    }

    public String getRequestId() {
        return requestId;
    }

    public void setRequestId(String requestId) {
        this.requestId = requestId;
    }
}

public class Vip extends PersistentEntity implements myInterface {
    ...
    ...
}

1 个答案:

答案 0 :(得分:1)

虽然它不优雅,但一种解决方案是在界面中指定实现类。

@JsonDeserialize(as=MyImplClass.class)
public interface myInterface {
    public Obj1 getObj1();
    public void setObj1(Obj1 Obj);
    public String getState();
    public void setState(String state);
} 

这样做的缺点是您的界面会意识到实现。

更好的选择IMO是使用Jackson配置,如下所述:http://wiki.fasterxml.com/JacksonMixInAnnotations