| /** | 
|  * Copyright (c) 2018 人人开源 All rights reserved. | 
|  * | 
|  * https://www.renren.io | 
|  * | 
|  * 版权所有,侵权必究! | 
|  */ | 
|   | 
| package com.zt.core.exception; | 
|   | 
| import cn.hutool.core.map.MapUtil; | 
| import com.alibaba.fastjson.JSON; | 
| import com.zt.common.exception.ErrorCode; | 
| import com.zt.common.exception.ExceptionUtils; | 
| import com.zt.common.exception.RenException; | 
| import com.zt.common.servlet.Result; | 
| import com.zt.common.utils.HttpContextUtils; | 
| import com.zt.common.utils.IpUtils; | 
| import com.zt.modules.log.model.SysLogError; | 
| import com.zt.modules.log.service.SysLogErrorService; | 
| import org.slf4j.Logger; | 
| import org.slf4j.LoggerFactory; | 
| import org.springframework.beans.factory.annotation.Autowired; | 
| import org.springframework.dao.DuplicateKeyException; | 
| import org.springframework.http.HttpHeaders; | 
| import org.springframework.web.bind.annotation.ExceptionHandler; | 
| import org.springframework.web.bind.annotation.RestControllerAdvice; | 
|   | 
| import javax.servlet.http.HttpServletRequest; | 
| import java.util.Map; | 
|   | 
| /** | 
|  * 异常处理器 | 
|  * | 
|  * @author Mark sunlightcs@gmail.com | 
|  * @since 1.0.0 | 
|  */ | 
| @RestControllerAdvice | 
| public class RenExceptionHandler { | 
|     private static final Logger logger = LoggerFactory.getLogger(RenExceptionHandler.class); | 
|   | 
|     @Autowired | 
|     private SysLogErrorService sysLogErrorService; | 
|   | 
|     /** | 
|      * 处理自定义异常 | 
|      */ | 
|     @ExceptionHandler(RenException.class) | 
|     public Result handleRenException(RenException ex) { | 
|         Result result = Result.ok(); | 
|         result = result.error(ex.getCode(), ex.getMsg()); | 
|   | 
|         return result; | 
|     } | 
|   | 
|     @ExceptionHandler(DuplicateKeyException.class) | 
|     public Result handleDuplicateKeyException(DuplicateKeyException ex) { | 
|         Result result = Result.ok(); | 
|         result.error(ErrorCode.DB_RECORD_EXISTS); | 
|   | 
|         return result; | 
|     } | 
|   | 
|     @ExceptionHandler(Exception.class) | 
|     public Result handleException(Exception ex) { | 
|         logger.error(ex.getMessage(), ex); | 
|   | 
|         saveLog(ex); | 
|   | 
|         return Result.ok().error(); | 
|     } | 
|   | 
|     /** | 
|      * 保存异常日志 | 
|      */ | 
|     private void saveLog(Exception ex) { | 
|         SysLogError log = new SysLogError(); | 
|   | 
|         // 请求相关信息 | 
|         HttpServletRequest request = HttpContextUtils.getHttpServletRequest(); | 
|         log.setIp(IpUtils.getIpAddr(request)); | 
|         log.setUserAgent(request.getHeader(HttpHeaders.USER_AGENT)); | 
|         log.setRequestUri(request.getRequestURI()); | 
|         log.setRequestMethod(request.getMethod()); | 
|         Map<String, String> params = HttpContextUtils.getParameterMap(request); | 
|         if (MapUtil.isNotEmpty(params)) { | 
|             log.setRequestParams(JSON.toJSONString(params)); | 
|         } | 
|   | 
|         // 异常信息 | 
|         log.setErrorInfo(ExceptionUtils.getErrorStackTrace(ex)); | 
|   | 
|         // 新增 | 
|         sysLogErrorService.insert(log); | 
|     } | 
| } |