为了账号安全,请及时绑定邮箱和手机立即绑定

Jackson和泛型参考

Jackson和泛型参考

幕布斯7119047 2019-10-17 10:08:38
我想将jackson json库用于通用方法,如下所示:public MyRequest<T> tester() {    TypeReference<MyWrapper<T>> typeRef = new TypeReference<MyWrapper<T>>();      MyWrapper<T> requestWrapper = (MyWrapper<T>) JsonConverter.fromJson(jsonRequest, typeRef);    return requestWrapper.getRequest();}...public class MyWrapper<T> {    private MyRequest<T> request;    public MyRequest<T> getRequest() {        return request;    }    public void setRequest(MyRequest<T> request) {        this.request = request;    }} public class MyRequest{     private List<T> myobjects;     public void setMyObjects(List<T> ets) {         this.myobjects = ets;     }     @NotNull     @JsonIgnore     public T getMyObject() {         return myobjects.get(0);     }}现在的问题是,当我调用请求对象内部的getMyObject()时,杰克逊将嵌套的自定义对象作为LinkedHashMap返回。有什么方法可以指定需要返回T对象吗?例如:如果我发送了类型为Customer的对象,则应该从该List?返回Customer。谢谢。
查看完整描述

3 回答

?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

“ JavaType”有效!我试图将json字符串中的列表解组(反序列化)为ArrayList java Objects,并且从现在开始一直在努力寻找解决方案。

下面是最终给我解决方案的代码。码:


JsonMarshallerUnmarshaller<T> {

    T targetClass;


    public ArrayList<T> unmarshal(String jsonString) {

        ObjectMapper mapper = new ObjectMapper();


        AnnotationIntrospector introspector = new JacksonAnnotationIntrospector();

        mapper.getDeserializationConfig()

            .withAnnotationIntrospector(introspector);


        mapper.getSerializationConfig()

            .withAnnotationIntrospector(introspector);

        JavaType type = mapper.getTypeFactory().

            constructCollectionType(

                ArrayList.class, 

                targetclass.getClass());


        try {

            Class c1 = this.targetclass.getClass();

            Class c2 = this.targetclass1.getClass();

            ArrayList<T> temp = (ArrayList<T>) 

                mapper.readValue(jsonString,  type);

            return temp ;

        } catch (JsonParseException e) {

            e.printStackTrace();

        } catch (JsonMappingException e) {

            e.printStackTrace();

        } catch (IOException e) {

            e.printStackTrace();

        }


        return null ;

    }  

}


查看完整回答
反对 回复 2019-10-17
  • 3 回答
  • 0 关注
  • 465 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信