6
我已經閱讀了很多關於這個問題的stackoverflow,但任何解決方案適用於我。有沒有人可以告訴我爲什麼它不起作用,因爲我已經描述了所有兒童的對象 - 或者可能不是?Json和抽象類'不能構造實例'
這是我對傑克遜
<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>
與我的抽象對象的屬性(MLMObject)主類
抽象類實現
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 text我要讀 - 這只是測試真正的消息。
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: [email protected]; 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)
請問有人能幫我嗎?
問候 月
[Jersey序列化/反序列化問題:抽象類型只能使用附加類型信息實例化](http://stackoverflow.com/questions/9066288/jersey-serialization-deserialization-issue-abstract-types-can -only-be-instantia) –
能否請你提供一段代碼,你正在創建'msg'對象 – tmarwen