使用 RestEasy 和 Jackson 将 json 输出解析为多种类型的列表
Parsing json output into lists of multiple types using RestEasy and Jackson
我在写 RestEasy Client API 输出是这样的
API A returns { "obj_a_list" : [A 的对象] }
API B returns { "obj_b_list" : [ B 的对象] }
我正在尝试编写一个通用的 class
import java.util.List;
class ListOfList<T> {
public ListOfList () {}
public List<T> getList() {
return theList;
}
public void setList(List<T> theList) {
this.theList = theList;
}
private List<T> theList;
} // ListOfList
是否可以在列表中添加动态注解@JsonProperty("obj_a_list")或@JsonProperty("obj_b_list")属性?
以便可以将其解析为
ListOfList<A> lol = response.readEntity(new GenericType<ListOfList<A>>(){});
List<A> la = lol.getList();
谢谢,
萨米尔
目前正在使用此解决方法。
/*
jsonString format could be
{ "A" : [ Array of A ] } OR
{ "B" : [ Array of B ] } OR
{ "C" : [ Array of C ] }
*/
public static <T> List<T> getList(Class<T> clazz, String jsonString, String arrayName) {
ObjectMapper mapper = new ObjectMapper();
List<T> retVal = new ArrayList<T>();
try {
Map<String, List<T>> userData = mapper.readValue(jsonString, Map.class);
List<T> l = userData.get(arrayName);
for (T a: l) {
retVal.add(mapper.readValue(mapper.writeValueAsString(a), clazz));
} // for
} catch (IOException e) {
e.printStackTrace();
}
return retVal;
}
我在写 RestEasy Client API 输出是这样的
API A returns { "obj_a_list" : [A 的对象] } API B returns { "obj_b_list" : [ B 的对象] }
我正在尝试编写一个通用的 class
import java.util.List;
class ListOfList<T> {
public ListOfList () {}
public List<T> getList() {
return theList;
}
public void setList(List<T> theList) {
this.theList = theList;
}
private List<T> theList;
} // ListOfList
是否可以在列表中添加动态注解@JsonProperty("obj_a_list")或@JsonProperty("obj_b_list")属性?
以便可以将其解析为
ListOfList<A> lol = response.readEntity(new GenericType<ListOfList<A>>(){});
List<A> la = lol.getList();
谢谢, 萨米尔
目前正在使用此解决方法。
/*
jsonString format could be
{ "A" : [ Array of A ] } OR
{ "B" : [ Array of B ] } OR
{ "C" : [ Array of C ] }
*/
public static <T> List<T> getList(Class<T> clazz, String jsonString, String arrayName) {
ObjectMapper mapper = new ObjectMapper();
List<T> retVal = new ArrayList<T>();
try {
Map<String, List<T>> userData = mapper.readValue(jsonString, Map.class);
List<T> l = userData.get(arrayName);
for (T a: l) {
retVal.add(mapper.readValue(mapper.writeValueAsString(a), clazz));
} // for
} catch (IOException e) {
e.printStackTrace();
}
return retVal;
}