使用带有继承类的Jackson注释

时间:2014-08-17 19:35:08

标签: java android orm annotations jackson

我正在开发一款Android应用,我将使用Jackson Annotation API对JSON进行反序列化。

在我尝试包含AndroidActive ORM之前,它确实运行良好,这需要您的POJO继承Model类(https://github.com/pardom/ActiveAndroid/blob/master/src/com/activeandroid/Model.java)。

我的JSON在asyncTask中被反序列化:

Reader reader = new InputStreamReader(url.openStream());
try {
    ObjectMapper mapper = new ObjectMapper();
    mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    rootJsonObj = mapper.readValue(reader, MyPojo.class);
} catch (JsonGenerationException e) {
    e.printStackTrace();
}

快速浏览一下我的pogo:

@Table(name = "RootRecipes") //AndroidActive annotation
public class RootRecipes extends Model { 

    @JsonProperty("deleted") //Jackson annotation
    @Column(name = "deleted") //AndroidActive annotation
    public ArrayList<Number> deleted; 

    @JsonProperty("meta")
    @Column(name = "meta")
    public Meta meta; 

    @JsonProperty("objects")
    @Column(name = "objects")
    public ArrayList<Objects> objects;

json非常大于2mo但结构如下:

{"deleted": [107981, 107982, 107995, 107999, 108012, 108014], 
"meta": {"is_anonymous": true, "latest": 1405555349, "limit": 1000, "next": null, "offset": 0, "page": 1, "pages": 1, "previous": null, "total_count": 20}, 
"objects": [<more objects>]}

给我的错误是:

com.fasterxml.jackson.databind.JsonMappingException: Instantiation of [simple type, class com.example.app.json.MyPojo] value failed: null

一旦我从Model中删除了继承,解析就会正常工作。 我无法弄清楚这个错误的原因。

感谢。

1 个答案:

答案 0 :(得分:0)

在我看来,你应该创建新的POJO类来处理与{@ 1}}分离的Android世界(我的意思是,他们不能拥有属性,来自Android软件包的父母)。它看起来像这样:

JSON

现在,您必须创建一个服务类,该服务类将能够解析class JsonRootRecipes { @JsonProperty("deleted") public List<Number> deleted; @JsonProperty("meta") public JsonMeta meta; @JsonProperty("objects") public List<Object> objects; // getters, setters, toString } class JsonMeta { @JsonProperty("is_anonymous") private boolean anonymous; // getters, setters, toString } // another POJOs decoupled from Android classes. 并将JSON类转换为您的Android JsonPojo类。伪代码:

POJO