尝试反序列化抽象对象时出现JsonMappingException

时间:2015-11-16 17:14:04

标签: java json jackson

尝试使用mTheta = (float)Math.atan2(imag, real); 时遇到问题。 场景如下:我有一个org.codehaus.jackson.map.ObjectMapper.readValue(String content, Class<NestedObject> valueType)类,其成员类为NestedObjectContainer类的成员Container类型为java.util.List。我使用这个抽象类是因为AbstractNestedObject类中的List可能包含类Container中的对象,也可能包含类Item中的对象,我需要遍历列表并保存各自的内容。

对象结构用于将JSON字符串映射到我的Java对象。我的问题是,当我尝试反序列化JSON字符串时,我得到以下异常:

Container

我已阅读有关注释但这些似乎无法解决我的问题,因为我的JSON字符串没有任何&#39;类型&#39;或者&#39; name&#39;。

也许有人可以帮我这个?这是我的课程:

NestedObject:

org.codehaus.jackson.map.JsonMappingException: Can not construct instance of src.AbstractNestedObject, problem: abstract types can only be instantiated with additional type information

抽象类:

public class NestedObject {

private Container container;

public NestedObject() {
}
public NestedObject(Container Container) {
    this.setContainer(container);
}
public Container getContainer() {
    return container;
}
public void setContainer(Container container) {
    this.container = container;
} 
}

两种对象类型的枚举:

public abstract class AbstractNestedObject {

private ObjectType objectType;


  public AbstractNestedObject() {
  }

  public AbstractNestedObject(ObjectType objectType){
    this.objectType = objectType;
  }

  public ObjectType getObjectType() {
    return objectType;
  }
 }

Container类:

public enum ObjectType {

CONTAINER,
ITEM;       
}

Item类:

import java.util.List;

public class Container extends AbstractNestedObject {

private String containerProperty;
public List<AbstractNestedObject> items;

public String getContainerProperty() {
    return containerProperty;
}
public void setContainerProperty(String containerProperty) {
    this.containerProperty = containerProperty;
}       
public List<AbstractNestedObject> getItems() {
    return items;
}    
public void setItems(List<AbstractNestedObject> items) {
    this.items = items;
}
}

测试类:

public class Item extends AbstractNestedObject {

private String color;
private String shape;
public String getColor() {
    return color;
}
public void setColor(String color) {
    this.color = color;
}
public String getShape() {
    return shape;
}
public void setShape(String shape) {
    this.shape = shape;
}
}

所以基本上,我有一个JSON字符串,我想要映射到以下Java对象结构:一个带有Container对象的Nestedobject类,该对象具有一个列表,其中列表可以包含一个具有属性颜色和形状的简单Item OR或容器对象再次具有包含Item或Container等的列表。

我希望我能够清楚地描述我的问题,有人可以帮助我。

0 个答案:

没有答案