我正在使用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 {
...
...
}
答案 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