jfinal在反射调用方法时报空指针异常
@jfinal JFinal @绝望的八皮 我在用java反射的方式调用一个service类中的一个方法去执行User.dao.findFirst方法时 在Model中的find方法中config及conn都是null,请问如何解决?
CTRL中 代码如下:
Service serviceMethod = clz.getMethod(method,RequestEntity.class).getAnnotation(Service.class); String login_token = req.getLogin_token(); LoginContext logincontext=new LoginContext(); if (serviceMethod.loginCheck() == true) {//验证是否登陆 login_token = req.getLogin_token(); logincontext = CacheKit.get(Constant.LOGIN_TOKEN, login_toen);//从缓存中读取登陆用户信息。 this.rendJson(resp); return; } try { clz.newInstance(); Method method1=clz.getMethod(method,RequestEntity.class); resp=(ResponseEntity)method1.invoke(clz.newInstance(),req); //记录日志: if(serviceMethod.log()==true&&logincontext.user!=null) { try { LogsService.me.insertLog(logincontext.getUser(), serviceMethod,req); } catch (Exception e1) { log.error("记录日志异常!logKey=>"+serviceMethod.logKey(),e1); } } } catch (Exception e) { log.error("执行方法异常:",e); resp.code = "error"; resp.setMsg(e.getMessage()); }
UserService代码:
public class UserService extends BaseService<User> { /*** * 登陆 * @param requestEntity * @return * @throws ServiceException */ @Service(loginCheck = false,method = "POST",log = true,logKey = "log_user_login",logType =0,fun = "",operat = "登陆") public ResponseEntity login(RequestEntity requestEntity) throws ServiceException{ ResponseEntity resp=new ResponseEntity(); Map<String,Object> formData=(Map<String,Object>)requestEntity.getData(); /*String vctoken=(String)formData.get(Constant.VCODE_TOKEN); String vcode=(String)formData.get("vcode"); if(CommonService.me.validVCode(vcode,vctoken)==false){ resp.msg="验证码错误!"; resp.success=false; return resp; }*/ String pwd=(String)formData.get("pwd"); String login_name=(String)formData.get("login_name"); User user=User.dao.login(login_name,pwd); if(user==null) { resp.setSuccess(false); resp.setMsg("用户名或密码错误!"); }else{//将用户信息存放在缓存中。 生成对应login_token LoginContext loginContext=new LoginContext(); loginContext.user=user; loginContext.person=Person.dao.findById(user.get("person_id")); String login_token= UUID.randomUUID().toString(); CacheKit.put(Constant.CACHE_KEY_1DAY,login_token,loginContext); Map<String,Object>data=new HashMap<>(); data.put(Constant.LOGIN_TOKEN,login_token); data.put("user",user); data.put("perseon",loginContext.person); resp.data=data; } return resp; }
User model中的代码
/** * Created by loyin on 15-1-30. */
@TableBind(tableName = "users")
public class User extends BaseEntity<User> {
public static final String tableName="users"; public static User dao=new User();
/** * 登陆 * @param login_name 登陆用户名 * @param pwd 密码 md5加密 * @return */
public User login(String login_name,String pwd){ return this.findFirst("select * from "+tableName+" where login_name=? and pwd=?",login_name,pwd); } }
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
能否将你的代码贴出来瞧瞧,我的代码都贴出来了
我自己也是有个modelext基类再继承的呢,,和你用法一样的但是可以。。那你改动了什么?
我的是User继承->BaseEntity->Model。
BaseEntity是不能实例化的bean。
引用来自“龙影”的评论
问题已经解决,由于使用的jfinal ext的自动绑定表插件不能扫描我自定义的BaseEntity类,需要将AutoBindtableplugin进行重写。
问题已经解决,谢谢关注。主要还是我又继承了一个BaseEntity类来做扩展。而jfinal-ext的是直接对Model的子类来做绑定的。
可以试试 jfinal-tablebind
问题已经解决,由于使用的jfinal ext的自动绑定表插件不能扫描我自定义的BaseEntity类,需要将AutoBindtableplugin进行重写。