在我的日常开发中,经常会自测自己写的Dubbo接口,或者联调调用别人写的Dubbo接口.
而通过Dubbo提供的telnet方式调用Dubbo接口,是我经常使用的方式.
然而方法的入参不同,调用的写法也不一样.接下来就由简至繁的方式介绍各种写法.
首先说明下:
我们调用的方法名叫做query,接口名叫做UserInfoFacade.
当然,你还要知道提供者的IP和端口,通过telnet命令连接.
第一种
入参是一个简单的字符串
代码语言:javascript复制String query(String address);
我们通过invoke命令调用
代码语言:javascript复制invoke UserInfoFacade.query("HANGZHOU")
第二种
代码语言:javascript复制String query(String address, Integer year);
代码语言:javascript复制invoke UserInfoFacade.query("HANGZHOU", 2020)
第三种
代码语言:javascript复制String query(UserInfoCondition userInfoCondition);
// 入参是一个对象,如下
public class UserInfoCondition {
private String address;
}
代码语言:javascript复制// 通过一个JSON格式传入
invoke UserInfoFacade.query({"address": "HANGZHOU"})
我们也可以通过class指定入参的类型
代码语言:javascript复制invoke UserInfoFacade.query({"class":"com.infuq.condition.UserInfoCondition","address": "HANGZHOU"})
第四种
代码语言:javascript复制String query(UserInfoCondition userInfoCondition);
// 入参是一个对象,对象中有个List属性
public class UserInfoCondition {
private List<String> addressList;
}
代码语言:javascript复制invoke UserInfoFacade.query({"addressList":["A","B","C"]})
// 入参还是一个JSON格式,key是入参对象的属性名,value是属性的值
第五种
代码语言:javascript复制String query(UserInfoCondition userInfoCondition);
public class UserInfoCondition {
private List<UserInfo> userList;
}
public class UserInfo {
private String address;
private String year;
}
代码语言:javascript复制invoke UserInfoFacade.query({"userList":[{"address":"HANGZHOU","year":"2020"},{"address":"HANGZHOU","year":"2021"}]})
// 可以这么理解入参,入参如果是对象,那么就用{}表示
// 属性如果是List,那么就用[]表示
// 即对象用{}表示,List用[]表示
第六种
这种情况比较特别,需要留意
代码语言:javascript复制String query(UserInfoCondition userInfoCondition);
public class UserInfoCondition {
private List<Map<String, Integer>> mList;
}
代码语言:javascript复制invoke UserInfoFacade.query({"mList":[{"year":2020},{"month":12}]})
第七种
代码语言:javascript复制String query(UserInfoCondition userInfoCondition);
public class UserInfoCondition {
// 这里的Map的key是字符串类型
private List<Map<String, UserInfo>> mUserList;
}
代码语言:javascript复制invoke UserInfoFacade.query({"mUserList":[{"Jim":{"address":"HANGZHOU","year":"2020"}},{"Ktu":{"address":"HANGZHOU","year":"2021"}}]})
第八种
代码语言:javascript复制String query(UserInfoCondition userInfoCondition);
public class UserInfoCondition {
// 这里的Map的key是Integer类型
private List<Map<Integer, UserInfo>> mUserList;
}
代码语言:javascript复制invoke UserInfoFacade.query({"xUserList":[{1:{"address":"HANGZHOU","year":"2020"},"class":"java.util.HashMap"},{2:{"address":"ZHEJIANG","year":"2021"},"class":"java.util.HashMap"}]})
或
invoke UserInfoFacade.query({"xUserList":[{"1":{"address":"HANGZHOU","year":"2020"},"class":"java.util.HashMap"},{"2":{"address":"ZHEJIANG","year":"2021"},"class":"java.util.HashMap"}]})
第九种
代码语言:javascript复制String query(UserInfoCondition userInfoCondition);
public class UserInfoCondition {
private Map<Integer, UserInfo> mUserMap;
}
代码语言:javascript复制invoke UserInfoFacade.query({"mUserMap":{12:{"address":"ZHEJIANG","year":"2020"},"class":"java.util.HashMap",13:{"address":"HANGZHOU","year":"2021"},"class":"java.util.HashMap"}})
第十种
代码语言:javascript复制String query(UserInfoCondition userInfoCondition);
public class UserInfoCondition {
private Map<UserInfo, Integer> mUserMap;
}
代码语言:javascript复制invoke UserInfoFacade.query({"mUserMap":{{"address":"ZHEJIANG","year":"2020"}:12,"class":"java.util.HashMap",{"address":"HANGZHOU","year":"2021"}:13,"class":"java.util.HashMap"}})
如果通过class指定的类是内部类,则通过$符号
代码语言:javascript复制invoke ItemProductService.getByItemProductQuery({"class":"com.xyz.service.ItemProductService$ItemProductQuery","artisanId":"11150a7f733942168960d85e80643c22","rows": 10000,"offset": 0,"isDel": 0})