【发布时间】:2020-09-17 05:12:54
【问题描述】:
我有以下课程:
public class Result<T> {
public int code;
public Object meta;
public T data;
}
public class User {
public int id;
public String name;
}
public class Error {
public String field;
public String message;
}
我想根据code 字段反序列化JSON 有效负载。如果code >= 10,则返回Result<ArrayList<Error>>,否则返回Result<User>
目前,我首先将JSON 映射到Result<Object>,然后检查code 字段。根据该值,我制作第二张地图到所需的对象。
ObjectMapper mapper = new ObjectMapper();
Result<Object> tempResult = mapper.readValue(json, new TypeReference<Result<Object>>() {});
if (tempResult.code < 10) {
Result<User> result = mapper.readValue(json, new TypeReference<Result<User>>() {});
return result;
} else {
Result<ArrayList<Error>> result = mapper.readValue(json, new TypeReference<Result<ArrayList<Error>>>() {});
return result;
}
有没有一种优雅的方法可以做到这一点而无需反序列化 2 次?
【问题讨论】:
标签: java json jackson deserialization json-deserialization