|
@@ -1,37 +1,31 @@
|
|
|
package com.llisoft.sms.config;
|
|
|
|
|
|
-import java.nio.file.AccessDeniedException;
|
|
|
+import java.util.Objects;
|
|
|
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
-import org.springframework.beans.factory.annotation.Autowired;
|
|
|
-import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.http.converter.HttpMessageNotReadableException;
|
|
|
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 org.springframework.web.bind.annotation.RestControllerAdvice;
|
|
|
+import org.springframework.web.servlet.NoHandlerFoundException;
|
|
|
|
|
|
import com.llisoft.common.constant.CodeEnum;
|
|
|
import com.llisoft.common.exception.MtaException;
|
|
|
-import com.llisoft.common.vo.MailSendVo;
|
|
|
import com.llisoft.common.vo.ResponseVo;
|
|
|
-import com.llisoft.sms.service.MailService;
|
|
|
|
|
|
/**
|
|
|
* 统一处理业务异常 controller
|
|
|
+ * 只能拦截到controller层的异常
|
|
|
+ * 如需拦截404等系统级异常,需要有如下配置
|
|
|
+ * spring.resources.addMappings: false #不为工程中的资源文件建立映射
|
|
|
+ * spring.mvc.throwExceptionIfNoHandlerFound: true #出现异常时直接抛出
|
|
|
* @author YangJie [2018年12月26日]
|
|
|
*/
|
|
|
-@ControllerAdvice
|
|
|
-public class ExceptionConfig {
|
|
|
+@RestControllerAdvice
|
|
|
+public class ExceptionHandlerConfig {
|
|
|
|
|
|
- private Logger logger = LoggerFactory.getLogger(ExceptionConfig.class);
|
|
|
-
|
|
|
- @Value("${spring.application.name}")
|
|
|
- private String application;
|
|
|
-
|
|
|
- @Autowired
|
|
|
- private MailService mailService;
|
|
|
+ private Logger logger = LoggerFactory.getLogger(ExceptionHandler.class);
|
|
|
|
|
|
|
|
|
/**
|
|
@@ -40,7 +34,7 @@ public class ExceptionConfig {
|
|
|
* @return
|
|
|
*/
|
|
|
@ExceptionHandler(HttpMessageNotReadableException.class)
|
|
|
- public @ResponseBody ResponseVo<String> exception(HttpMessageNotReadableException exception){
|
|
|
+ public ResponseVo<String> exception(HttpMessageNotReadableException exception){
|
|
|
logger.warn("入参异常: {}", exception.getMessage());
|
|
|
return ResponseVo.build(CodeEnum.C400);
|
|
|
}
|
|
@@ -51,31 +45,36 @@ public class ExceptionConfig {
|
|
|
* @return
|
|
|
*/
|
|
|
@ExceptionHandler(MethodArgumentNotValidException.class)
|
|
|
- public @ResponseBody ResponseVo<String> exception(MethodArgumentNotValidException exception){
|
|
|
+ public ResponseVo<String> exception(MethodArgumentNotValidException exception){
|
|
|
logger.warn("入参异常: {}", exception.getMessage());
|
|
|
return ResponseVo.build(CodeEnum.C400.getCode(), exception.getBindingResult().getFieldError().getDefaultMessage());
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 无权访问
|
|
|
+ * 业务异常
|
|
|
* @param exception
|
|
|
* @return
|
|
|
*/
|
|
|
- @ExceptionHandler(AccessDeniedException.class)
|
|
|
- public @ResponseBody ResponseVo<String> exception(AccessDeniedException exception){
|
|
|
- logger.warn("无权访问: {}", exception.getMessage());
|
|
|
- return ResponseVo.build(CodeEnum.C403);
|
|
|
+ @ExceptionHandler(MtaException.class)
|
|
|
+ public ResponseVo<String> exception(MtaException exception){
|
|
|
+ CodeEnum codeEnum = exception.getCodeEnum();
|
|
|
+ if (Objects.nonNull(codeEnum)) {
|
|
|
+ return ResponseVo.build(codeEnum.getCode(), codeEnum.getMsg());
|
|
|
+ }
|
|
|
+ logger.warn("业务异常: {}", exception.getMessage());
|
|
|
+ return ResponseVo.build(CodeEnum.FAIL.getCode(), exception.getMessage());
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
+
|
|
|
/**
|
|
|
- * 业务异常
|
|
|
+ * 地址异常
|
|
|
* @param exception
|
|
|
* @return
|
|
|
*/
|
|
|
- @ExceptionHandler(MtaException.class)
|
|
|
- public @ResponseBody ResponseVo<String> exception(MtaException exception){
|
|
|
- logger.warn("业务异常: {}", exception.getMessage());
|
|
|
- return ResponseVo.build(CodeEnum.FAIL.getCode(), exception.getMessage());
|
|
|
+ @ExceptionHandler(NoHandlerFoundException.class)
|
|
|
+ public ResponseVo<String> exception(NoHandlerFoundException exception){
|
|
|
+ logger.warn("地址异常: {}", exception.getMessage());
|
|
|
+ return ResponseVo.build(CodeEnum.C404);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -84,9 +83,8 @@ public class ExceptionConfig {
|
|
|
* @return
|
|
|
*/
|
|
|
@ExceptionHandler(Exception.class)
|
|
|
- public @ResponseBody ResponseVo<String> exception(Exception exception){
|
|
|
+ public ResponseVo<String> exception(Exception exception){
|
|
|
logger.error("服务异常", exception);
|
|
|
- mailService.sendMail("【" + application + "】服务异常", MailSendVo.exception(exception));
|
|
|
return ResponseVo.build(CodeEnum.C500);
|
|
|
}
|
|
|
|