您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“Java中如何實現Springboot全局異常處理”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“Java中如何實現Springboot全局異常處理”這篇文章吧。
springboot提供了全局異常處理的注解,我們需要弄明白的是。撲捉什么異常,結果如果返回,如何優雅的管理返回的結果集。
自定義接口主要是描述返回的code碼和返回msg,自定義錯誤描述枚舉需要實現這個接口
public interface ErrorType { /** * 返回code * * @return */ String getCode(); /** * 返回mesg * * @return */ String getMesg(); }
使用枚舉,看起來代碼很優雅,并且不用使用static final來定義類型。
@Getter public enum SystemErrorType implements ErrorType { SYSTEM_ERROR("-1", "系統異常"), SYSTEM_BUSY("000001", "系統繁忙,請稍候再試"); /** * 錯誤類型碼 */ private String code; /** * 錯誤類型描述信息 */ private String mesg; SystemErrorType(String code, String mesg) { this.code = code; this.mesg = mesg; } }
@Getter public class MyException extends RuntimeException{ /** * 異常對應的錯誤類型 */ private final ErrorType errorType; /** * 默認是系統異常 */ public MyException () { this.errorType = SystemErrorType.SYSTEM_ERROR; } public MyException(SystemErrorType systemErrorType) { this.errorType = systemErrorType; }
@RestControllerAdvice @Slf4j public class GlobalExceptionHandlerAdvice extends DefaultGlobalExceptionHandlerAdvice { @ExceptionHandler(value = {MyException .class}) public Result MyException (MyException ex) { log.error(ex.getMessage()); return Result.fail(ex.getErrorType()); } @ExceptionHandler(value = {NotRoleException.class}) public Result NotRoleException(NotRoleException nle) { // 打印堆棧,以供調試 //nle.printStackTrace(); String message = "該功能僅供"+nle.getRole()+"使用!"; // 返回給前端 return Result.fail("090017",message,null); } }
也不是說只能通過枚舉來返回,只要你的返回工具類支持參數填寫,可以做類似于第二種的返回,但是這樣方法對于返回的code來太好管理
比如我做判空處理時,利用枚舉作為參數返回
@PostMapping("/listQuestionVO") public Result listQuestionBankVO(@RequestBody QuestionBankQuery query){ if (query.getPageNum()==null || query.getPageSize()==null){ return Result.fail(QuestionnaireErrorType.PARAMETERISNULL_ERROR); } Result result = questionBankService.listQuestionBankVO(query); return result; }
實際上,你可以在你需要處理異常的地方直接throws異常,可以直接在方法上throws拋出,等待全局異常捕獲
以上是“Java中如何實現Springboot全局異常處理”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。