1. 程式人生 > >springBoot 全域性異常捕捉(裡面包含個各種常見異常)

springBoot 全域性異常捕捉(裡面包含個各種常見異常)

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.validation.BindException;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.HttpMediaTypeNotSupportedException; import org.springframework.web.HttpRequestMethodNotSupportedException; import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.MissingServletRequestParameterException; 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.ResponseStatus; import org.springframework.web.servlet.NoHandlerFoundException; import javax.validation.ConstraintViolation;
import javax.validation.ConstraintViolationException; import javax.xml.bind.ValidationException; import java.util.Set; /** * 異常處理類 */ @ControllerAdvice @ResponseBody public class CommonExceptionAdvice { private static Logger logger = LoggerFactory.getLogger(CommonExceptionAdvice.class); /** * 400 - Bad Request */ @ResponseStatus(HttpStatus.BAD_REQUEST) @ExceptionHandler(MissingServletRequestParameterException.class) public String handleMissingServletRequestParameterException(MissingServletRequestParameterException e) { logger.error("缺少請求引數", e); return "缺少請求引數"; } /** * 400 - Bad Request */ @ResponseStatus(HttpStatus.BAD_REQUEST) @ExceptionHandler(HttpMessageNotReadableException.class) public String handleHttpMessageNotReadableException(HttpMessageNotReadableException e) { logger.error("引數解析失敗", e); return "引數解析失敗"; } /** * 400 - Bad Request */ @ResponseStatus(HttpStatus.BAD_REQUEST) @ExceptionHandler(MethodArgumentNotValidException.class) public String handleMethodArgumentNotValidException(MethodArgumentNotValidException e) { logger.error("引數驗證失敗", e); BindingResult result = e.getBindingResult(); FieldError error = result.getFieldError(); String field = error.getField(); String code = error.getDefaultMessage(); String message = String.format("%s:%s", field, code); return "引數驗證失敗="+message; } /** * 400 - Bad Request */ @ResponseStatus(HttpStatus.BAD_REQUEST) @ExceptionHandler(BindException.class) public String handleBindException(BindException e) { logger.error("引數繫結失敗", e); BindingResult result = e.getBindingResult(); FieldError error = result.getFieldError(); String field = error.getField(); String code = error.getDefaultMessage(); String message = String.format("%s:%s", field, code); return "引數繫結失敗="+message; } /** * 400 - Bad Request */ @ResponseStatus(HttpStatus.BAD_REQUEST) @ExceptionHandler(ConstraintViolationException.class) public String handleServiceException(ConstraintViolationException e) { logger.error("引數驗證失敗", e); Set<ConstraintViolation<?>> violations = e.getConstraintViolations(); ConstraintViolation<?> violation = violations.iterator().next(); String message = violation.getMessage(); return "引數驗證失敗" + message; } /** * 400 - Bad Request */ @ResponseStatus(HttpStatus.BAD_REQUEST) @ExceptionHandler(ValidationException.class) public String handleValidationException(ValidationException e) { logger.error("引數驗證失敗", e); return "引數驗證失敗"; } /** * 404 - Not Found */ @ResponseStatus(HttpStatus.NOT_FOUND) @ExceptionHandler(NoHandlerFoundException.class) public String noHandlerFoundException(NoHandlerFoundException e) { logger.error("Not Found", e); return "Not Found="+e; } /** * 405 - Method Not Allowed */ @ResponseStatus(HttpStatus.METHOD_NOT_ALLOWED) @ExceptionHandler(HttpRequestMethodNotSupportedException.class) public String handleHttpRequestMethodNotSupportedException(HttpRequestMethodNotSupportedException e) { logger.error("不支援當前請求方法", e); return "request_method_not_supported"; } /** * 415 - Unsupported Media Type */ @ResponseStatus(HttpStatus.UNSUPPORTED_MEDIA_TYPE) @ExceptionHandler(HttpMediaTypeNotSupportedException.class) public String handleHttpMediaTypeNotSupportedException(HttpMediaTypeNotSupportedException e) { logger.error("不支援當前媒體型別", e); return "content_type_not_supported"; } /** * 業務層需要自己宣告異常的情況 */ @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) @ExceptionHandler(ServiceException.class) public String handleServiceException(ServiceException e) { logger.error("業務邏輯異常", e); return "業務邏輯異常:" + e.getMessage(); } /** * 操作資料或庫出現異常 */ @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) @ExceptionHandler(DataDoException.class) public String handleException(DataDoException e) { logger.error("操作資料庫出現異常:", e); return "操作資料庫出現異常:欄位重複、有外來鍵關聯等"; } /** * 500 - Internal Server Error */ /* @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) @ExceptionHandler(Exception.class) public String handleException(Exception e) { logger.error("通用異常", e); return "500通用異常:" + e.getMessage(); }*/ /** * 獲取其它異常。包括500 * @param e * @return * @throws Exception */ @ExceptionHandler(value = Exception.class) public String defaultErrorHandler(Exception e){ logger.error("Exception", e); return "其它異常:" + e.getMessage(); } }    package cn.com.cs.core.exception; /** * 操作資料或庫出現異常 */ public class DataDoException extends RuntimeException{ public DataDoException(String msg) { super(msg); } }    package cn.com.cs.core.exception; /** * 業務層需要自己宣告異常的情況 */ public class ServiceException extends RuntimeException{ public ServiceException(String msg) { super(msg); } }    #developEnvironment spring: mvc: throw-exception-if-no-handler-found: true resources: add-mappings: false #出現錯誤時, 直接丟擲異常 spring.mvc.throw-exception-if-no-handler-found=true #不要為我們工程中的資原始檔建立對映 spring.resources.add-mappings=false

相關推薦

springBoot 全域性異常捕捉裡面包含各種常見異常

import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.http.HttpStatus; import org.springframework.http.conve

最短路小結三種演算法+各種常見變種

額,博主只是做了幾(約數)道題而已,寫這篇小結純粹想留作紀念(勿噴,但是可以交流)(那啥,轉載的話註明一下來源。。打字不容易。。) 最短路呢,包括三種演算法,但是各有各的變種,其中變化有很多。 簡單記錄一下。 首先是三種演算法: 1、Dijkstra演算

SpringBoot全域性日誌管理AOP

1、在pom.xml中引入aop的jar包 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</

資料結構實驗之排序七:選課名單裡面包含了新思想!!!!好神奇

Attention: 如果struct node 裡的陣列開的太大,會導致MLE!!!   資料結構實驗之排序七:選課名單 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic

C# 中的異常捕捉try異常處理catch

        為了捕捉異常,程式碼要放到一個 try 塊中(try 是 C# 關鍵字)。程式碼執行時它會嘗試執行 try 塊內的所有語句。如果沒有任何語句產生一個異常,這些語句將一個接一個執行,直到全部完成。然而,一旦出現異常,就會跳出 try 塊,並進入一個 catch 處理程式中執行。      

HTTP multipart/form-data 上傳方式說明有8註意點

ria ubi reference 就會 ros pda www tran cep ( From: http://home.meegoq.com/home-space-do-blog-uid-17-id-81.html ) HTTP multipart/form-data

過濾當前目錄下的一級目錄包含目錄下的目錄

一級目錄方法一[[email protected]/* */ ~]# ls -ltotal 56drwxr-xr-x. 2 root root 4096 Jul 2 09:48 a-rw-------. 1 root root 1079 Jun 9 07:12 anaconda-ks.cf

SQL Server 索引中include的魅力具有包含性列的索引

eal 效率 .com 從表 大小 關系 user 優化器 則無 開文之前首先要講講幾個概念 【覆蓋查詢】 當索引包含查詢引用的所有列時,它通常稱為“覆蓋查詢”。 【索引覆蓋】  如果返回的數據列就包含於索引的鍵值中,或者包含於索引的鍵值+聚集索引的鍵值中,那麽就不

推薦系統中協同過濾演算法實現分析重要兩圖!!

“協”,指許多人協力合作。 “協同”,就是指協調兩個或者兩個以上的不同資源或者個體,協同一致地完成某一目標的過程。 “協同過濾”,簡單來說,就是利用興趣相投或擁有共同經驗的群體的喜好來給使用者推薦感興趣的資訊,記錄下來個人對於資訊相當程度的迴應(如評分),以達到過濾的目的,進而幫助別人篩

異常處理程序健壯性→功能→性能

父類 位置 jdk 報錯 fin 允許 代碼 沒有 多層 異常 (Exception):發生於程序執行期間,表明出現了一個非法的運行狀況。許多JDK中的方法在檢測到非法情況時,都會拋出一個異常對象。例如:數組越界和被0除。 try{ //可能發生運行錯誤的代碼;

C#實現類只例項化一次被多類訪問呼叫

C#簡單寫法如下: public  class  Singleton {      private  static  Singleton _instance =  n

Python之異常處理執行python檔案時傳入引數

使用sys模組 使用sys模組裡的argv引數,用來儲存引數值 import sys #sys.argv的作用是獲取到執行python檔案時,傳入的引數 #預設如果執行python檔案不傳引數,argv裡面只有一個引數,就是當前這個檔案的檔名 import flask server=

springboot 上傳圖片多張和單張都可以

@RequestMapping("/upload") @ResponseBody public String handleFileUpload(HttpServletRequest request) { MultipartHttpServletRequest params = ((Multi

查詢oracle資料庫是否有重複資料根據多欄位判斷

根據多個欄位查詢重複資料的總條數: sql = "select count(*) from tablea a where (a.askname, a.atime) in (select askname,atime from tablea group by askname,atime having count

kafka 在linux ubuntu下跑起來攻略包含解壓之類的

kafka 跑起來 步驟 首先 剛進來的時候 測試Java的環境是否 正常執行 輸入 Java -version 如果 正常就進行下一步  進入系統許可權 輸入 sudo -i 回車然後 $變為#即為成功 然後下一步 進入 你kafka解壓的目錄 不需要 進入bin目錄 輸入 bin/zo

springboot整合docker部署兩種構建Docker映象方式

在docker開始部署springBoot專案(方法一) Dockerfile 檔案 FROM openjdk:8-jdk-alpine VOLUME /tmp ADD testdocker-1.0-SNAPSHOT.jar app.jar ENTRYPOINT ["java","-Djava.s

長短期記憶LSTM系列_LSTM的資料準備6——如何處理序列預測問題中的缺失時間步長附兩完整LSTM例項

導讀: 本文討論分析了輸入資料中,有資料缺失的情況如何處理 一般有兩種情況,分別是對缺失值進行替換和學習,忽略對缺失值的學習 同時文章演示了對於缺失值得補全方法。 文末附帶兩個LSTM程式碼,比較了兩種對缺失值不同處理方式的網路模型優劣 正文: 通常從序列資料中缺少觀察結果。 資料可

LeetCode 21: Merge Two Sorted Lists合併兩有序連結串列

原題 Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the fir

將應用程式新增到gnome3的全域性選單中並支援修改為預設程式

在gnome3中,如果將滑鼠移動到左上角,就會出現一個程式選單,類似於win8中的start介面,在這裡直接鍵入英文就可以快速索引程式,十分方便。不過像deadbeef(筆者喜歡的一個輕量級音樂播放器)這種從網上獲取的可執行檔案無法作為程式出現在gnome3的程式選單中,而

springboot學習總結二Spring boot的核心配置檔案

Spring boot的核心配置檔案 spring boot的核心配置檔案用於配置Spring boot程式,有兩種格式的配置檔案 properties檔案--- 鍵值對的properties屬性檔案配置方式     &nb