日常开发中我们需要通过dubbo的telnet方式调用接口进行测试代码.
如果遇到No such method…异常, 其实并不是说没有这个方法,除非你真的把你调用的方法名写错了(一般人干不出来), 而是99%可能是你的方法入参不对.
一般非对象的入参不会出错, 类似
void addUserInfo(String name, int year)
telnet调用如下
invoke UserInfoFacade.addUserInfo(“阿苏”, 2017)
多半出错的问题是入参中有对象的情况
举例如下
package con.infuq;
public class Person {
private String address;
}
public class Request {
private int id;
}
public interface UserInfoFacade {
List<UserInfoDO> addUserInfo(Person person);
List<UserInfoDO> addUserInfo(Person person, Request req);
}
对于第一个方法,有一个参数,通过telnet调用的写法如下
invoke UserInfoFacade.addUserInfo({“class”:“com.infuq.Person”,“address”:“天津市”})
对于第二个方法,有两个参数,通过telnet调用的写法如下
invoke UserInfoFacade.addUserInfo({“class”:“com.infuq.Person”,“address”:“天津市”},{“class”:“com.infuq.Request”,“id”:456})
总结
如果入参中有对象, 每个对象都需要使用一个{“class”:“x.y.z.Object”}类似这样的东东表示, 记得哦, 是一个对象对应一个{}, 如上面的举例, 两个入参对象就需要使用两个{}表示.