/**
|
* 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);
|
}
|
}
|