以前寫過一篇統一異常處理的文章,今天測試了下若是訪問一個不存在的接口,也想返回統一的錯誤信息,應該怎麼作java
# 自定義404 #出現錯誤時, 直接拋出異常 spring.mvc.throw-exception-if-no-handler-found=true #不要爲咱們工程中的資源文件創建映射 spring.resources.add-mappings=false
if (e instanceof NoHandlerFoundException) { return ResultUtil.error(ResultEnum.NO_HANDLER_FOUND_ERROR); }
訪問 http://localhost:8080/hello1
git
// 20190705114619 // http://localhost:8080/hello1 { "code": 404, "msg": "接口不存在", "data": null }
package com.kevin.common.exception; import com.kevin.common.entity.Result; import com.kevin.common.enums.ResultEnum; import com.kevin.common.util.ResultUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.validation.BindException; import org.springframework.validation.ObjectError; import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; import org.springframework.web.servlet.NoHandlerFoundException; import java.util.List; /** * 異常處理器 * * @author kevin * @date 2019/7/4 14:46 */ @RestControllerAdvice @Slf4j public class KevinExceptionHandler { @ExceptionHandler(Exception.class) public Result handleException(Exception e) { log.error(e.getMessage(), e); if (e instanceof KevinException) { return ResultUtil.error(e.getMessage()); } else if (e instanceof NoHandlerFoundException) { return ResultUtil.error(ResultEnum.NO_HANDLER_FOUND_ERROR); } else if (e instanceof IllegalArgumentException) { return ResultUtil.error(e.getMessage()); } else if (e instanceof IllegalStateException) { return ResultUtil.error(e.getMessage()); } else if (e instanceof BindException) { BindException ex = (BindException) e; List<ObjectError> allErrors = ex.getAllErrors(); ObjectError error = allErrors.get(0); String defaultMessage = error.getDefaultMessage(); return ResultUtil.error(defaultMessage); } else if (e instanceof MethodArgumentNotValidException) { MethodArgumentNotValidException ex = (MethodArgumentNotValidException) e; List<ObjectError> errors = ex.getBindingResult().getAllErrors(); String message = errors.get(0).getDefaultMessage(); return ResultUtil.error(message); } else { return ResultUtil.error(ResultEnum.UNKNOW_ERROR); } } }
好了玩的開心github
最近在整合一個springboot2.X的框架。裏面就集成了這塊,有興趣的能夠下載下來看看
地址:https://github.com/FunCodingOfWe/kevin-bootweb
歡迎startspring