如何在java中序列化和反序列化抽象类或接口的对象?

时间:2016-06-23 10:38:55

标签: json serialization interface deserialization abstract-class

我是json世界的新手。我在stackoverflow上提到了几个问题。我按照http://wiki.fasterxml.com/JacksonPolymorphicDeserialization的说法尝试了,但没有开始工作。我正在使用mongoDB。

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property= "type")
@JsonSubTypes({@Type(value = UserImpl.class, name = "userData")})
public abstract class User {
    public abstract long getId();
    public abstract void setId(long id);
    public abstract String getFirstName();
    public abstract void setFirstName(String firstName);
}

@JsonTypeName("userData")
public class UserImpl extends User {
    @Id
    private long id;
    private String firstName;
// Constructor
//Getter and setter
}

我添加了以下依赖项:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
    <version>2.7.5</version>
</dependency>

我只是想将数据添加到用户表中。我正在

org.springframework.data.mapping.model.MappingInstantiationException: Failed to instantiate com.example.model.User using constructor public com.example.model.User() with arguments 
    at org.springframework.data.convert.ReflectionEntityInstantiator.createInstance(ReflectionEntityInstantiator.java:78)
    at org.springframework.data.convert.ClassGeneratingEntityInstantiator.createInstance(ClassGeneratingEntityInstantiator.java:83)
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:251)
....

请帮助我出错的地方。

1 个答案:

答案 0 :(得分:0)

嗯,代码没有问题。在添加注释之前,我在User表中有一些数据。不得不删除所有数据,然后尝试。工作!