Java Json和抽象类';无法构造实例';

Java Json和抽象类';无法构造实例';,java,json,jackson,Java,Json,Jackson,我在stackoverflow上读了很多关于这个问题的文章,但任何解决方案都适合我。有谁能告诉我为什么它不起作用,因为我已经正确地描述了所有的儿童对象-或者可能没有 这是我对杰克逊的依赖 <context:annotation-config/> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl&l

我在stackoverflow上读了很多关于这个问题的文章,但任何解决方案都适合我。有谁能告诉我为什么它不起作用,因为我已经正确地描述了所有的儿童对象-或者可能没有

这是我对杰克逊的依赖

<context:annotation-config/>    
<dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-mapper-asl</artifactId>
    <version>1.9.10</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
    <version>2.3.2</version>
</dependency>
抽象类实现

import com.fasterxml.jackson.annotation.*;



@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type")
@JsonSubTypes({
        @JsonSubTypes.Type(value=Person.class, name="person"),
        })
public abstract class MLMObject {

    public MLMObject() {
        super();        
    }


}
import com.fasterxml.jackson.annotation.JsonTypeName;


@JsonTypeName("person")
public class Person extends MLMObject{

    private String name;
    private String secondName;


    public Person() {
        super();
    }

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getSecondName() {
        return secondName;
    }
    public void setSecondName(String secondName) {
        this.secondName = secondName;
    }




}
子类实现

import com.fasterxml.jackson.annotation.*;



@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type")
@JsonSubTypes({
        @JsonSubTypes.Type(value=Person.class, name="person"),
        })
public abstract class MLMObject {

    public MLMObject() {
        super();        
    }


}
import com.fasterxml.jackson.annotation.JsonTypeName;


@JsonTypeName("person")
public class Person extends MLMObject{

    private String name;
    private String secondName;


    public Person() {
        super();
    }

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getSecondName() {
        return secondName;
    }
    public void setSecondName(String secondName) {
        this.secondName = secondName;
    }




}
我将阅读json文本——这是对真实消息的唯一测试

String msg = "{\"errorCode\": 0,\"errorMessage\":\"\",\"object\":{\"type\":\"person\",\"name\":\"Jan\",\"secondName\":\"Jan\"}}";
我试着用下面的代码来读它

ObjectMapper objectMapper = new ObjectMapper();
 MLMResponse emp = objectMapper.readValue(msg, MLMResponse.class);
但当我运行它时,我得到了以下错误

org.codehaus.jackson.map.JsonMappingException: Can not construct instance of com.pl.model.MLMObject, problem: abstract types can only be instantiated with additional type information
 at [Source: java.io.StringReader@a06816; line: 1, column: 34] (through reference chain: com.pl.model.MLMResponse["object"])
    at org.codehaus.jackson.map.JsonMappingException.from(JsonMappingException.java:163)
    at org.codehaus.jackson.map.deser.StdDeserializationContext.instantiationException(StdDeserializationContext.java:233)
    at org.codehaus.jackson.map.deser.AbstractDeserializer.deserialize(AbstractDeserializer.java:60)
    at org.codehaus.jackson.map.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:299)
    at org.codehaus.jackson.map.deser.SettableBeanProperty$MethodProperty.deserializeAndSet(SettableBeanProperty.java:414)
    at org.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:697)
    at org.codehaus.jackson.map.deser.BeanDeserializer.deserialize(BeanDeserializer.java:580)
    at org.codehaus.jackson.map.ObjectMapper._readMapAndClose(ObjectMapper.java:2732)
    at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1863)
    at com.pl.service.JacksonMappingService.mapLoginMessage(JacksonMappingService.java:22)
    at com.pl.controller.HelloWorldController.hello(HelloWorldController.java:38)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
谁能帮我一下吗

问候
Jan

同步您的Jackson版本。Jackson 1查找Jackson 1批注,Jackson 2查找Jackson 2批注。您正在尝试让Jackson 1查找Jackson 2批注。这根本不起作用。

可能重复的。请提供您正在创建
msg
对象的代码段