Dubbo-泛化调用-泛型

背景

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

 public Response add(Department department, UserInfo userName, List test);

解决方式

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

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

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

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

你可能感兴趣的:(Dubbo-泛化调用-泛型)