Dubbo-泛化调用-泛型

背景

今天刚好有需求需要用到dubbo的泛化调用,涉及到了泛型问题:服务端无法获取泛型对象的数据,特此记录。

 public Response add(Department<Person[]> department, UserInfo userName, List<Person> test);

解决方式

Department对象包含Person对象,按照普通方式调用服务将无法获取对象:

genericService.$invoke("add", new String[] {"com.xxx.Department","com.xxx..UserInfo","java.util.List"},
                new Object[] {null,null,null});

所以通过Map的形式指定泛型类型,

        Map<String, Object> data = new HashMap<String, Object>();
        data.put("name", 1);
        //指定当前对象的类型
        data.put("class", "com.xxx.Department");
        //这是子属性,所以class定义的也是子属性的类型
        Map<String, Object> person = new HashMap<String, Object>();
        person.put("class","com.xxx.Person");
        person.put("name", "TEST");
        data.put("data", person);

       //调用成功
       genericService.$invoke("add",new String[] {"com.xxx.Department",
                        "com.xxx.UserInfo","java.util.List"}
                , new Object[]{data,null,null});

需要注意的是,记得在泛化调用时,在ReferenceConfig中打开泛型:

        reference.setGeneric(true);

官方文档:https://dubbo.gitbooks.io/dubbo-user-book/demos/generic-reference.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容