使用RestEasy和Jackson将json输出解析为多种类型的列表

时间:2015-09-07 00:10:47

标签: java json jackson resteasy

我正在编写RestEasy Client API,输出就像这样

API A返回{" obj_a_list" :[A的对象] API B返回{" obj_b_list" :[B的对象]}

我正在尝试编写泛型类

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

是否可以在List属性上使用动态注释@JsonProperty(&#34; obj_a_list&#34;)或@JsonProperty(&#34; obj_b_list&#34;)?

以便可以将其解析为

ListOfList<A> lol = response.readEntity(new GenericType<ListOfList<A>>(){});
List<A> la = lol.getList(); 

谢谢, 萨米尔

1 个答案:

答案 0 :(得分:0)

目前正在使用此解决方法。

/*
        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;

    }