gpt4 book ai didi

java - 在继承类中使用 Jackson 注释

转载 作者:行者123 更新时间:2023-11-29 08:45:58 26 4
gpt4 key购买 nike

我正在开发一个 Android 应用程序,我在其中使用 Jackson Annotation API 反序列化 JSON。

在我尝试包含 AndroidActive ORM 之前,它工作得非常好,这要求您的 POJO 继承自模型类 ( 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

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

谢谢。

最佳答案

在我看来,你应该创建新的 POJO 类来处理 JSON ,它与 Android 世界分离(我的意思是,它们不能有属性, parent 来自安卓包)。它可能看起来像这样:

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 并将 JsonPojo 类转换为您的 Android POJO 类。伪代码:

class JsonService {

public RootRecipes parseJson(json) throws IOException {
ObjectMapper mapper = new ObjectMapper();
mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);

JsonRootRecipes jsonRootRecipes = mapper.readValue(json, JsonRootRecipes.class);

RootRecipes rootRecipes = null; //convert jsonRootRecipes to RootRecipes

return rootRecipes;
}
}

关于java - 在继承类中使用 Jackson 注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25352916/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com