背景
今天剛好有需求需要用到dubbo的泛化調(diào)用缕粹,涉及到了泛型問(wèn)題:服務(wù)端無(wú)法獲取泛型對(duì)象的數(shù)據(jù)别厘,特此記錄靖避。
public Response add(Department<Person[]> department, UserInfo userName, List<Person> test);
解決方式
Department對(duì)象包含Person對(duì)象跋理,按照普通方式調(diào)用服務(wù)將無(wú)法獲取對(duì)象:
genericService.$invoke("add", new String[] {"com.xxx.Department","com.xxx..UserInfo","java.util.List"},
new Object[] {null,null,null});
所以通過(guò)Map的形式指定泛型類型蒸殿,
Map<String, Object> data = new HashMap<String, Object>();
data.put("name", 1);
//指定當(dāng)前對(duì)象的類型
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);
//調(diào)用成功
genericService.$invoke("add",new String[] {"com.xxx.Department",
"com.xxx.UserInfo","java.util.List"}
, new Object[]{data,null,null});
需要注意的是,記得在泛化調(diào)用時(shí)宏所,在ReferenceConfig
中打開(kāi)泛型:
reference.setGeneric(true);
官方文檔:https://dubbo.gitbooks.io/dubbo-user-book/demos/generic-reference.html