@黄勇 你好,想跟你请教个问题:
黄老师,你好。
我将你的书《架构探险》的源代码在eclipse执行,用jdk1.6,建了表customer,当我访问页面时总是报
java.lang.IllegalArgumentException: wrong number of arguments sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) java.lang.reflect.Method.invoke(Method.java:606) com.sunny.study.smart.framework.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:47) com.sunny.study.smart.framework.DispatcherServlet.service(DispatcherServlet.java:82) javax.servlet.http.HttpServlet.service(HttpServlet.java:728) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
我报错代码是DispatcherServlet.java:
if (param.isEmpty()) {
result = ReflectionUtil.invokeMethod(controllerBean, actionMethod);
} else {
result = ReflectionUtil.invokeMethod(controllerBean, actionMethod, param);
}
调用的方法是ReflectionUtil类中的
public static Object invokeMethod(Object obj, Method method, Object... args) {
Object result;
try {
method.setAccessible(true);
result = method.invoke(obj, args);
} catch (Exception e) {
LOGGER.error("invoke method failure", e);
throw new RuntimeException(e);
}
return result;
}
这段是因为在DispatcherServlet没有送参数args,但是这不是可变参数吗?应该是可以不送的,看代码应该是没问题的
麻烦有时间请指教!
问题解决了,在invokeMethod方法中加个判断
try{
if(args.length==0){
args=newObject[1];
}
method.setAccessible(true);
result=method.invoke(obj,args);
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。