package com.nms.swspkmas_standalone.exception;
|
|
import cn.hutool.core.util.StrUtil;
|
import com.nms.swspkmas_standalone.response.CommonResult;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.validation.BindException;
|
import org.springframework.validation.BindingResult;
|
import org.springframework.validation.FieldError;
|
import org.springframework.web.bind.MethodArgumentNotValidException;
|
import org.springframework.web.bind.annotation.ControllerAdvice;
|
import org.springframework.web.bind.annotation.ExceptionHandler;
|
import org.springframework.web.bind.annotation.ResponseBody;
|
|
import javax.servlet.http.HttpServletRequest;
|
import java.sql.SQLSyntaxErrorException;
|
|
/**
|
* 全局异常处理类
|
*/
|
@Slf4j
|
@ControllerAdvice
|
public class GlobalExceptionHandler {
|
|
@Autowired
|
private HttpServletRequest request;
|
|
@ResponseBody
|
@ExceptionHandler(value = ApiException.class)
|
public CommonResult handle(ApiException e) {
|
writeExceptionLogFile(e);
|
if (e.getErrorCode() != null) {
|
return CommonResult.failed(e.getErrorCode());
|
}
|
return CommonResult.failed(e.getMessage());
|
}
|
|
@ResponseBody
|
@ExceptionHandler(value = MethodArgumentNotValidException.class)
|
public CommonResult handleValidException(MethodArgumentNotValidException e) {
|
writeExceptionLogFile(e);
|
BindingResult bindingResult = e.getBindingResult();
|
String message = null;
|
if (bindingResult.hasErrors()) {
|
FieldError fieldError = bindingResult.getFieldError();
|
if (fieldError != null) {
|
message = fieldError.getField()+fieldError.getDefaultMessage();
|
}
|
}
|
return CommonResult.validateFailed(message);
|
}
|
|
@ResponseBody
|
@ExceptionHandler(value = BindException.class)
|
public CommonResult handleValidException(BindException e) {
|
writeExceptionLogFile(e);
|
BindingResult bindingResult = e.getBindingResult();
|
String message = null;
|
if (bindingResult.hasErrors()) {
|
FieldError fieldError = bindingResult.getFieldError();
|
if (fieldError != null) {
|
message = fieldError.getField()+fieldError.getDefaultMessage();
|
}
|
}
|
return CommonResult.validateFailed(message);
|
}
|
|
|
/**
|
* 500 其他服务器异常
|
*/
|
@ResponseBody
|
@ExceptionHandler(Exception.class)
|
public CommonResult otherExceptionHandler(Exception e) {
|
writeExceptionLogFile(e);
|
String message = StrUtil.isNotBlank(e.getMessage()) ? e.getMessage() : e.toString();
|
return CommonResult.failed(message);
|
}
|
|
|
@ResponseBody
|
@ExceptionHandler(value = SQLSyntaxErrorException.class)
|
public CommonResult handleSQLSyntaxErrorException(SQLSyntaxErrorException e) {
|
writeExceptionLogFile(e);
|
String message = e.getMessage();
|
if (StrUtil.isNotEmpty(message) && message.contains("denied")) {
|
message = "暂无修改权限,如需修改数据可本地搭建后台服务!";
|
}
|
return CommonResult.failed(message);
|
}
|
|
private void writeExceptionLogFile(Exception e) {
|
String url=request.getRequestURL().toString();
|
String message = StrUtil.isNotBlank(e.getMessage()) ? e.getMessage() : e.toString();
|
log.error("error={}", e);
|
log.error(message+",url={}",url);
|
}
|
}
|