首页 > 编程知识 正文

springboot创建类,springboot 异常处理

时间:2023-05-06 10:47:09 阅读:144236 作者:3048

在此期间,客户提出了想知道谁进入系统做了什么的需求,但不需要记录任何内容。 所以我想写评论和切面来实现这个功能。 代码很粗,有什么不对的地方。

实现向控制器释放效果注的接口,填写事件名称。 因为想记录操作对象的主键是什么,所以还有另一个id。 这个id写着我交给的对象的主键名。 做法请看下面的代码。

用户界面访问界面时,数据库中会记录操作符、事件名称。 传入的参数是什么? 然后制作时间。 有了这个数据,前端可以根据需要进行展示。

代码注释类/*** Description:简单记录操作日志* @return返回型* @author大地定律祝* createtime 2021/5/2410336026 */@ documented @ 该项目中的人员是通过前端传递的token解析获得的人员String name () default '未知人员); //事件名称根据接口用途自行填写。 String event () default '未知事件); //对象的主键名称根据要传递的对象的主键修改。 如果String传了的话。 中,直接从参数(数据库)获取。 stringid (默认'未知主键'; )2.切面类

/*** Description:日志切面* @return返回型* @author格兰德定律祝* create time 2021/5/24 10:26 */@ component @ aspect @ sl fff @ resourceprivateloginfomapperloginfomapper; @ pointcut (@ annotation (com.DLG.patrol.annotation.operation log ) ) ) private void pointCut ) }{}@before ) @around('pointcut ) @annotation (操作日志) ') publicobjectadvict操作日志操作日志(throwsjsonproce (sing end ) ) String id=' '; 字符串值=' '; 对象结果=null; //接口参数Object[] args=joinPoint.getArgs (; for(intI=0; i args.length; I ) if(args[I]==null ) { continue; //这是注释中的ID,从注释中的ID='ID名称'开始,在id名称反射中传递的目标类中的相应ID if ('未知主键'.equals (操作日志. id ) ) (args [ I ] instanceofhttpservletrequest ) ()反射性地获取主键。 这里比较粗糙。 //主键位于继承的父类中,是私有的。 Field[] fields=args[i].getClass ().getFields ); field [ ] declared fields=args [ I ].getclass (.get super class ).getDeclaredFields ); try{for(fieldfield:fields ) field.setaccessible ) true; if (操作日志. id ).equals(field.getname ) ) id=(字符串) field.get (args ) I ); } for (field field : declared fields ) field.setaccessible ) true; if (操作日志. id ).equals(field.getname ) ) id=(字符串) field.get (args ) I ); } } catch (illegalaccessexceptione ) { e.printStackTrace ); (//这是获得操作者的。 在我们的项目中,通过HttpServletRequest的header的token获取个人信息。 这里,根据自身项目的状况,使用if (args [ I ] instanceofhttpservletrequest ({ httpservletrequestrequest=) httpservletrequest ) args string userid=redis util.get userid (request ); real name=userorgmanagefeign.get userinfo (userid ).getData ).getRealName ); 布雷克; } else { objectmappermapper=new object mapper (; value=value ' parameter 3360 ' mapper.writevalueasstring (args [ I ]; (//此处是操作日志表中存储的操作try ) loginfologinfo=newloginfo ); log info.setcreatedon (新日期) ); log info.setevent (操作日志. event ); log info.setlogid (uuid.random uuid ().toString ) ); if (! ' '.equals(id ) ) loginfo.seteventid ); }loginfo.setparameter(value ); loginfo.setusername(realname ); log info mapper.insert selective (log info ); }catch(exceptione ) { e.printStackTrace ); } try { result=join point.proceed (args ); } catch (可追溯) { throwable.printStackTrace ); //因为这里是返回的消息,所以不做任何处理,直接返回,并与自己的项目合作修改if(resultinstanceofAPIresult ) APIresultAPIresult=) API result (result ) result 返回API结果; }返回结果; }@after(pointcut ) @annotation (操作日志) ) publicvoidafter (操作日志) ) }3.使用

没有说明注释的使用。

总结水平有限,写得比较简单,有什么不对的地方请大神告诉我。 谢谢你。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。