《web工程aop实现前台操作日志记录》初稿

xiaoxiao2021-02-27  300

写日志功能很繁琐,博主废了一些时间写出来分享,用的ssm框架,后期会设置优先级,避免所有方法都会被记录到日志。开始:

1、首先定义一个自定义注解@controllerLog和@serviceLog

package com.hhwy.business.annotation; import java.lang.annotation.*; @Target({ElementType.PARAMETER, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface ControllerLog { String description()  default ""; }

package com.hhwy.business.annotation; import java.lang.annotation.*; @Target({ElementType.PARAMETER, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface ServiceLog { String description()  default ""; }

2、在webapp下找到 plugin-config.xml或者applicationContext.xml(公司项目中用的plugin-config.xml,以此为例)

3、完了之后可以手写Aspect类

package com.hhwy.business.service.impl; import java.lang.reflect.Method; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.AfterThrowing; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import com.alibaba.fastjson.JSON; import com.hhwy.business.annotation.ControllerLog; import com.hhwy.business.annotation.ServiceLog; import com.hhwy.business.core.modelutil.ExecutionResult; import com.hhwy.business.domain.LogException; import com.hhwy.business.domain.LogMeg; import com.hhwy.business.service.LogService; import com.hhwy.framework.util.PlatformTools; import com.hhwy.sso.client.filter.SessionUtil;   @Aspect @Component @Scope("prototype") public  class LogAspect {     //注入Service用于把日志保存数据库     @Resource     private LogService logService;     //本地异常日志记录对象     private  static  final Logger logger = LoggerFactory.getLogger(LogAspect. class);       //Service层切点     @Pointcut("@annotation(com.hhwy.business.annotation.ServiceLog)")     public  void serviceAspect() {     }     //Controller层切点     @Pointcut("@annotation(com.hhwy.business.annotation.ControllerLog)")     public  void controllerAspect() {     }      //定义id接受数据库中存放位置的id String id;     /**      * 前置通知 用于拦截Controller层记录用户的操作      *      * @param joinPoint 切点      */     @Around("controllerAspect()")     public Object around(ProceedingJoinPoint pjp) throws Throwable{         //读取session中的用户     HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();         //请求的IP     String ip = request.getRemoteAddr();     LogMeg log = new LogMeg();     Object proceed = null;     try {     //获取执行的方法名     log.setOperateMethod((pjp.getTarget().getClass().getName() + "." + pjp.getSignature().getName() + "()"));     //获取调用方法的用户ip     log.setOperateIp(ip);//ip放入logMeg实体     //获取执行的模块(注解中的内容)     log.setOperateModule(JSON.toJSONString(getControllerMethodDescription(pjp)));     //获取访问者的唯一标识     log.setVisitorId(SessionUtil.getLoginUserId());     //获取用户名     log.setOperator(SessionUtil.getLoginName());     //获取用户访问的uri     log.setURI(request.getRequestURI());       //获取方法执行前时间        Date date=new Date();     DateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");     String startTime=format.format(date);         log.setStartTime(startTime);     this.id = PlatformTools.getID();     //aop环绕环绕通知执行的原方法     proceed = pjp.proceed();     //提取controller中ExecutionResult的属性     ExecutionResult result = (ExecutionResult) proceed;     log.setOperateResult(result.getCode());     log.setDetail(result.getMsg());     //获取方法调用结束时间     Date date2=new Date();       DateFormat format2=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");     String endTime =format2.format(date2);     log.setEndTime(endTime);     log.setId(this.id);     System.out.println("保存前:^^^^^^^^^^^^^^^^^^^^^"+id);     logService.saveLog(log);     System.out.println("保存后^^^^^^^^^^^^^^^^^^^^^"+id);     System.out.println(this);     return proceed;     }  catch (Exception e) {     e.printStackTrace();     //记录本地异常日志     logger.error("==环绕通知异常==");     logger.error("异常信息:{}", e.getMessage());     return null;     }     }             /**      * 异常通知 用于拦截service层记录异常日志      *      * @param joinPoint      * @param e      */     @AfterThrowing(pointcut = "serviceAspect()", throwing = "e")     public  void doAfterThrowing(JoinPoint joinPoint, Throwable e) {     HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();         //读取session中的用户         SessionUtil.getLoginUserName();         //获取请求ip                String ip = request.getRemoteAddr();         LogException logException  =  new LogException();         try {                /*==========数据库日志=========*/             logException.setExceptionCode(e.getClass().getName());             logException.setExceptionMessage(e.getMessage());             logException.setExceptionMethod((joinPoint.getTarget().getClass().getName() + "." + joinPoint.getSignature().getName() + "()"));             System.out.println("保存前:#################################"+this.id);             System.out.println(this);             logException.setLogOperateId(this.id);             System.out.println(logException.getLogOperateId()+"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$");             logException.setMethodDescription(getServiceMthodDescription(joinPoint));             //保存数据库             logService.saveLogException(logException);             System.out.println("保存后:#################################"+this.id);         }  catch (Exception exception) {             //记录本地异常日志         exception.printStackTrace();             logger.error("==serivce通知异常==");             logger.error("异常信息:{}", e.getMessage());         }          /*==========记录本地异常日志==========*/        logger.error("异常方法:{}异常代码:{}异常信息:{}参数:{}", joinPoint.getTarget().getClass().getName() + joinPoint.getSignature().getName(), e.getClass().getName(), e.getMessage());       }         /**      * 获取注解中对方法的描述信息 用于service层注解      *      * @param joinPoint 切点      * @return 方法描述      * @throws Exception      */     public  static String getServiceMthodDescription(JoinPoint joinPoint)             throws Exception {         String targetName = joinPoint.getTarget().getClass().getName();         String methodName = joinPoint.getSignature().getName();         Object[] arguments = joinPoint.getArgs();         Class targetClass = Class.forName(targetName);         Method[] methods = targetClass.getMethods();         String description = "";         for (Method method : methods) {             if (method.getName().equals(methodName)) {                 Class[] clazzs = method.getParameterTypes();                 if (clazzs.length == arguments.length) {                     description = method.getAnnotation(ServiceLog. class).description();                     break;                 }             }         }         return description;     }       /**      * 获取注解中对方法的描述信息 用于Controller层注解      *      * @param joinPoint 切点      * @return 方法描述      * @throws Exception      */     public  static String getControllerMethodDescription(ProceedingJoinPoint pjp)  throws Exception {         String targetName = pjp.getTarget().getClass().getName();         String methodName = pjp.getSignature().getName();         Object[] arguments = pjp.getArgs();         Class targetClass = Class.forName(targetName);         Method[] methods = targetClass.getMethods();         String description = "";         for (Method method : methods) {             if (method.getName().equals(methodName)) {                 Class[] clazzs = method.getParameterTypes();                 if (clazzs.length == arguments.length) {                     description = method.getAnnotation(ControllerLog. class).description();                     break;                 }             }         }         return description;     } }

4、接下来写一个service接口及实现类,用来存储获取到的检测信息

package com.hhwy.business.service.impl; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import com.hhwy.business.annotation.ServiceLog; import com.hhwy.business.domain.LogException; import com.hhwy.business.domain.LogMeg; import com.hhwy.business.domain.LogMessageDetail; import com.hhwy.business.domain.LogVo; import com.hhwy.business.service.LogService; import com.hhwy.framework.persistent.DAO; import com.hhwy.framework.persistent.QueryResult; @Component public class LogServiceImpl implements LogService{ @Autowired DAO<?> dao; /** * 保存日志信息 */ public void saveLog(LogMeg lmg){ dao.save(lmg); } public void saveLogException(LogException logException){ dao.save(logException); } /** * 分页查询log信息表 */ @ServiceLog(description = "查询日志service") public QueryResult<LogMeg> getLogMessageByPage(LogVo logVo){ QueryResult<LogMeg> queryResult = new QueryResult<LogMeg>(); long total = getLogCount(logVo); //int a=1/0; List<LogMeg> data = getLogMessage(logVo); queryResult.setTotal(total); queryResult.setData(data); return queryResult; } public Integer getLogCount(LogVo logVo){ Object result = dao.getOneBySQL("logSpace.sql.projectsSize",logVo); int total = result == null ? 0 : Integer.valueOf(result.toString()); return total; } @SuppressWarnings("unchecked") public List<LogMeg> getLogMessage(LogVo logVo){ if (logVo == null) { logVo = new LogVo(); } List<LogMeg> logMessage = (List<LogMeg>) dao.getBySql("logSpace.sql.logPage", logVo); return logMessage; } /** * 通过ID查询所有日志记录详情 */ public LogMessageDetail getLogMessage(String id){ LogMessageDetail logMessageDetail = new LogMessageDetail(); logMessageDetail.setLogMeg(getLogById(id));//a4e55ef84bda4d09a809a2561e51770d LogException logException = new LogException(); logException.setLogOperateId(id);//a4e55ef84bda4d09a809a2561e51770d logMessageDetail.setLogException(getLogExceptionById(logException.getLogOperateId())); return logMessageDetail; } /** * 通过id获取log详细信息 */ public LogMeg getLogById(String id){ LogMeg logMeg =  dao.findById(id, LogMeg.class); return logMeg; } /** * 通过id获取logException详细信息 */ public LogException getLogExceptionById(String id) { LogException logException = (LogException) dao.getOneBySQL("logSpace.sql.logExceptionPageById", id); System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"+logException+id); return logException; } }

这过程中用写了2个实体类(logException记录异常信息,logMeg记录执行正常信息)1个vo (需要传递参数的实体类)1个detail(需要显示到前台的类)

package com.hhwy.business.domain; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Inheritance; import javax.persistence.InheritanceType; import javax.persistence.Table; import com.hhwy.framework.persistent.entity.Domain; @Entity(name="LogException") @Inheritance(strategy = InheritanceType.SINGLE_TABLE) @Table(name="log_exception") public class LogException extends Domain{ /** * serialVersionUID * @return  the serialVersionUID * @since   1.0.0 */ private static final long serialVersionUID = 1L; //表log_operate的id外键 @Column(name="log_operate_id", length=32) private String logOperateId; //异常代码 @Column(name="exception_code", length=512) private String exceptionCode; //异常信息 @Column(name="exception_message", length=512) private String exceptionMessage; //异常方法 @Column(name="exception_method", length=100) private String exceptionMethod; //异常方法描述 @Column(name="method_description", length=100) private String methodDescription; public String getMethodDescription() { return methodDescription; } public void setMethodDescription(String methodDescription) { this.methodDescription = methodDescription; } public String getLogOperateId() { return logOperateId; } public void setLogOperateId(String logOperateId) { this.logOperateId = logOperateId; } public String getExceptionCode() { return exceptionCode; } public void setExceptionCode(String exceptionCode) { this.exceptionCode = exceptionCode; } public String getExceptionMessage() { return exceptionMessage; } public void setExceptionMessage(String exceptionMessage) { this.exceptionMessage = exceptionMessage; } public String getExceptionMethod() { return exceptionMethod; } public void setExceptionMethod(String exceptionMethod) { this.exceptionMethod = exceptionMethod; } public static long getSerialversionuid() { return serialVersionUID; } }

《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》

package com.hhwy.business.domain; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Inheritance; import javax.persistence.InheritanceType; import javax.persistence.Table; import com.fasterxml.jackson.annotation.JsonFormat; import com.hhwy.framework.persistent.entity.Domain; @Entity(name="LogMeg") @Inheritance(strategy = InheritanceType.SINGLE_TABLE) @Table(name="log_operate") public class LogMeg extends Domain { /** * serialVersionUID * @return  the serialVersionUID * @since   1.0.0 */ private static final long serialVersionUID = 1L; //记录操作人ID @Column(name="visitor_id", length=32) private String visitorId; //记录操作人的ip @Column(name="operate_ip", length=32) private String operateIp; //记录操作人的用户名 @Column(name="operator", length=32) private String operator; //记录操作模块 @Column(name="operate_module", length=32) private String operateModule; //记录操作开始时间 @Column(name="start_time", length=32) @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8") private String startTime; //记录模块操作的方法 @Column(name="operate_method", length=256) private String operateMethod; //记录操作结果 @Column(name="operate_result", length=32) private String operateResult; //记录操作结束时间 @Column(name="end_time", length=100) @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8") private String endTime; //记录操作详情 @Column(name="detail", length=100) private String detail; //执行的uri @Column(name="uri", length=100) private String URI; public String getURI() { return URI; } public void setURI(String uRI) { URI = uRI; } public String getOperateIp() { return operateIp; } public void setOperateIp(String operateIp) { this.operateIp = operateIp; } public String getOperator() { return operator; } public void setOperator(String operator) { this.operator = operator; } public String getOperateModule() { return operateModule; } public void setOperateModule(String operateModule) { this.operateModule = operateModule; } public String getOperateMethod() { return operateMethod; } public void setOperateMethod(String parammaps) { this.operateMethod = parammaps; } public String getDetail() { return detail; } public void setDetail(String detail) { this.detail = detail; } public static long getSerialversionuid() { return serialVersionUID; } public String getStartTime() { return startTime; } public void setStartTime(String startTime) { this.startTime = startTime; } public String getEndTime() { return endTime; } public void setEndTime(String endTime) { this.endTime = endTime; } public String getVisitorId() { return visitorId; } public void setVisitorId(String visitorId) { this.visitorId = visitorId; } public String getOperateResult() { return operateResult; } public void setOperateResult(String operateResult) { this.operateResult = operateResult; } }

《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》

package com.hhwy.business.domain; import com.hhwy.business.core.modelutil.PagingProperty; public class LogVo extends PagingProperty{ //记录操作模块 private String operateModule; //记录模块操作的方法 private String operateMethod; //记录操作结果 private String operateResult; //记录产生详情 private String detail; public String getDetail() { return detail; } public void setDetail(String detail) { this.detail = detail; } public String getOperateModule() { return operateModule; } public void setOperateModule(String operateModule) { this.operateModule = operateModule; } public String getOperateMethod() { return operateMethod; } public void setOperateMethod(String operateMethod) { this.operateMethod = operateMethod; } public String getOperateResult() { return operateResult; } public void setOperateResult(String operateResult) { this.operateResult = operateResult; } }

《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》

package com.hhwy.business.domain; public class LogMessageDetail{

//封装了两个实体类作为参数 private LogMeg logMeg; private LogException logException; public LogMeg getLogMeg() { return logMeg; } public void setLogMeg(LogMeg logMeg) { this.logMeg = logMeg; } public LogException getLogException() { return logException; } public void setLogException(LogException logException) { this.logException = logException; } }

5、数据库同样我建立了两张表、分别存储logMeg和logException

log_exception表

log_operate表:

6、那么接下来的工作都结束了,可以检测我们的成果

1、页面

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head lang="en"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <jsp:include page="/plugins/business-core/static/headers/base.jsp"></jsp:include> </head> <body id="consVue" v-cloak style="height: 100%"> <mk-top-bottom height="100%" top_height="auto"> <mk-search-panel slot="top" deployable="false" title="Test888888888888"> </mk-search-panel>  <mk-panel title="日志信息显示" line="true" v-cloak slot="bottom" height="100%"> <div slot="buttons" class="pull-right " style="text-align: right" v-cloak> <su-button class="btn-operator" s-type="default" labeled="true" v-on:click="detail">查看详情</su-button> </div> <div class="col-xs-12" style="height: 500px"> <table id="consGrid" style="height: 300px"></table> </div> </mk-panel>  </mk-top-bottom> <script type="text/javascript"> var basePath = '${Config.baseURL}'; //对应 js var consVue = new Vue({ el : '#consVue', data : { params : { LogVo : { operateModule : null, operateMethod : null, operateResult : null, detail :null } }, editable:true }, ready : function() { //列表数据加载 $('#consGrid').datagrid({ url: basePath + 'business/LogController/LogPage',    width:"100%",    height:"300px",    pagination: true,    method: 'post',  singleSelect:true,    queryParams:this.params,    rownumbers: true,    pagination: true,    nowrap: false,    fitColumns:true,    columns:[[     {field:'visitorId',title:'用户名',width:100},           {field:'operateModule',title:'操作模块',width:100},              {field:'operateMethod',title:'操作方法',width:100},              {field:'operateResult',title:'操作结果',width:100},              {field:'detail', title:'详情',width:100}          ]],    pageSize: 10,    pageList: [10, 20, 50, 100, 150, 200],    rowStyler:function(idx,row){        return "height:35px;font-size:12px;";    }    });  }, methods : { detail : function(id) { var row = $('#consGrid').datagrid('getSelected'); $.ajax({     type:"GET",     url: 'detail.jsp',     async:false,     data:null,     success:function(msg){         if (msg) {//根据返回值进行跳转             window.location.href = '${Config.baseURL}view/business/archives/scconsumerinfo/detail?id='+row.id;         }     } }); } } } ); </script> </body> </html>

详情页detail

<%@ page language="java" contentType="text/html; charset=UTF-8"     pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head lang="en"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <jsp:include page="/plugins/business-core/static/headers/base.jsp"></jsp:include> <style type="text/css"> .datagrid-row-selected{ background-color: #eeeeee; color:#000000; } </style> </head> <body id="logDetail" v-cloak> <mk-form-panel title="日志信息详情" label_width="140px">     <mk-form-row>         <mk-form-col label="用户ID">             <su-textbox type="text"  placeholder="" :data.sync="params.logMeg.visitorId"  disabled></su-textbox>         </mk-form-col>          <mk-form-col label="操作人" >             <su-textbox name="bdz" id="bdz61549_id"  :data.sync="params.logMeg.operator" disabled></su-textbox>         </mk-form-col>         <mk-form-col label="操作人Ip">             <su-textbox name="bdz" id="bdz61549_id"  :data.sync="params.logMeg.operateIp" disabled></su-textbox>         </mk-form-col>     </mk-form-row>     <mk-form-row>         <mk-form-col label="操作模块" >             <su-textbox name="bdz" id="bdz61549_id"  :data.sync="params.logMeg.operateModule"  disabled></su-textbox>         </mk-form-col>         <mk-form-col label="操作方法" >             <su-textbox type="text"  placeholder="" :data.sync="params.logMeg.operateMethod" disabled></su-textbox>         </mk-form-col> <mk-form-col   label="起始时间" >             <su-textbox type="text"  placeholder="" :data.sync="params.logMeg.startTime" disabled></su-textbox>         </mk-form-col>     </mk-form-row>          <mk-form-row>        <mk-form-col   label="结束时间" >             <su-textbox type="text"  placeholder="" :data.sync="params.logMeg.endTime" disabled></su-textbox>         </mk-form-col>         <mk-form-col   label="耗时"  >             <su-textbox type="text" rows="3" rols="10" name="bdz" id="bd_id"  :data.sync="haoshi" disabled></su-textbox>         </mk-form-col>          <mk-form-col label="操作结果" >             <su-textbox name="bdz" id="bdz61549_id"  :data.sync="params.logMeg.operateResult" disabled></su-textbox>         </mk-form-col>      </mk-form-row>      <mk-form-row height="90px">     <mk-form-col  colspan="3" label="日志详情"  >             <su-textbox type="textarea" rows="3" rols="10" name="bdz" id="bdz61549_id"  :data.sync="params.logMeg.detail" disabled></su-textbox>         </mk-form-col>       </mk-form-row>       <mk-form-row>        <mk-form-col   label="异常代码" >             <su-textbox type="text"  placeholder="" :data.sync="params.logException.exceptionCode" disabled></su-textbox>         </mk-form-col>         <mk-form-col   label="异常信息"  >             <su-textbox type="text" rows="3" rols="10" name="bdz" id="bdz61549_id"  :data.sync="params.logException.exceptionMessage" disabled></su-textbox>         </mk-form-col>          <mk-form-col label="异常方法" >             <su-textbox name="bdz" id="bdz61549_id"  :data.sync="params.logException.exceptionMethod" disabled></su-textbox>         </mk-form-col>      </mk-form-row>      <mk-form-row height="170px">     <mk-form-col  colspan="3" label="异常描述"  >             <su-textbox type="textarea" rows="7" rols="10" name="bdz" id="bdz61549_id"  :data.sync="params.logException.methodDescription" disabled></su-textbox>         </mk-form-col>       </mk-form-row> </mk-form-panel> <script type="text/javascript"> var basePath = '${Config.baseURL}'; //对应 js var id='${param.id}'; var logDetail=new Vue({ el: '#logDetail', data: { params:{ logMeg:{visitorId:null,operateIp:null,operator:null,operateModule:null,operateMethod:null,operateResult:null,detail:null, startTime:null,endTime:null}, logException:{exceptionCode:null,exceptionMessage:null,exceptionMethod:null,methodDescription:null} }, haoshi:null }, ready : function() { var me=this; $.ajax({ type:'GET', url:basePath + 'LogController/getLogMessage/'+id, data: String,             contentType: "application/json;charset=utf-8",             //dataType: "json",             async: false,//同步     error: function () {//请求失败处理函数     alert('请求失败');    }, success:function(data){ me.params=data.data; }     }) } }); </script> </body> </html>

用到的controller类

package com.hhwy.business.controller; import javax.servlet.http.HttpServletRequest; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import com.hhwy.business.annotation.ControllerLog; import com.hhwy.business.core.modelutil.ExecutionResult; import com.hhwy.business.core.modelutil.ReturnCode; import com.hhwy.business.domain.LogMeg; import com.hhwy.business.domain.LogMessageDetail; import com.hhwy.business.domain.LogVo; //import com.hhwy.business.logUtil.StaticLogUtil; import com.hhwy.business.service.LogService; import com.hhwy.framework.persistent.QueryResult; @RestController @RequestMapping("/LogController") public class LogController { @Autowired LogService logService; public static final Logger log = LoggerFactory.getLogger(LogMeg.class); /** * 通过传入实体lmg,增加日志信息 * saveLogMessage(描述这个方法的作用)<br/> * @param lmg * @return  * Object * @exception  * @since  1.0.0 */ @RequestMapping(value = "saveLogMessage", method = RequestMethod.GET) public Object saveLogMessage(@PathVariable LogMeg lmg){ ExecutionResult result = new ExecutionResult(); try {    logService.saveLog(lmg); result.setCode(ReturnCode.RES_SUCCESS); //设置返回结果编码:成功 result.setFlag(true); //设置是否成功标识 result.setMsg("保存成功!"); //设置返回消息,根据实际情况修改 } catch (Exception e) { log.error("保存失败!",e); //记录异常日志,根据实际情况修改 result.setCode(ReturnCode.RES_FAILED); //设置返回结果编码:失败 result.setFlag(false); //设置是否成功标识 result.setData(null); //设置返回结果为空 result.setMsg("保存失败!"); //设置返回消息,根据实际情况修改 return result; } return result; } /** * 获取日志列表,分页显示 * getLogByPage(描述这个方法的作用)<br/> * @param logMeg * @return * @throws Exception  * Object * @exception  * @since  1.0.0 */ @ControllerLog(description = "日志添加操作") @RequestMapping(value = "/LogPage", method = RequestMethod.POST) public Object getLogByPage(HttpServletRequest req, @RequestBody(required=false) LogVo logVo){ ExecutionResult result = new ExecutionResult(); System.out.println("controller的地址:"+ this);         try {         QueryResult<LogMeg> queryResult = logService.getLogMessageByPage(logVo);     result.setTotal(queryResult.getTotal()); //设置数据总条数     result.setRows(queryResult.getRows() == null ? queryResult.getData() : queryResult.getRows()); //设置数据列表             result.setCode(ReturnCode.RES_SUCCESS);     //设置返回结果编码:成功             result.setFlag(true);                       //设置是否成功标识             result.setMsg("查询成功!");                 //设置返回消息,根据实际情况修改         } catch (Exception e) {             log.error("查询失败!",e);                       //记录异常日志,根据实际情况修改             result.setCode(ReturnCode.RES_FAILED);      //设置返回结果编码:失败             result.setFlag(false);                      //设置是否成功标识             result.setData(null);                       //设置返回结果为空             result.setMsg("查询失败!");                 //设置返回消息,根据实际情况修改         }         return result; }              @RequestMapping(value = "/getLogMessage/{id}", method = RequestMethod.GET)     public Object getLogMessage(@PathVariable String id) {         ExecutionResult result = new ExecutionResult();         try {         LogMessageDetail logMessageDetaileg = logService.getLogMessage(id);                        result.setCode(ReturnCode.RES_SUCCESS);     //设置返回结果编码:成功             result.setFlag(true);                       //设置是否成功标识             result.setData(logMessageDetaileg);                 //设置实体             result.setMsg("查询成功!");                 //设置返回消息,根据实际情况修改         } catch (Exception e) {             log.error("查询失败!",e);                       //记录异常日志,根据实际情况修改             result.setCode(ReturnCode.RES_FAILED);      //设置返回结果编码:失败             result.setFlag(false);                      //设置是否成功标识             result.setData(null);                       //设置返回结果为空             result.setMsg("查询失败!");                 //设置返回消息,根据实际情况修改             return result;         }         return result;     }    }

6、大功告成

使用过程中只需要在这两个地方加上注解就可以了

controller层

service层加

ok,可以了

转载请注明原文地址: https://www.6miu.com/read-4866.html

最新回复(0)