SpringBoot全局異常捕獲參數(shù)以及參數(shù)異常的解決方案
現(xiàn)在比較常用的方式是給前端返回JSON,但是有些時(shí)候程序出現(xiàn)一些異常,導(dǎo)致前端頁面報(bào)錯(cuò)不是很友好,所以就需要對(duì)項(xiàng)目進(jìn)行全局的異常捕獲,返回給前端固定的格式,進(jìn)行友好的處理!
話不多說,開始寫代碼
一.全局異常捕獲
1.1 全局捕獲
@Slf4j
@RestControllerAdvice(annotations = {RestController.class})
public class BaseExceptionHandler {
/**
* <p>
* 全局Base異常處理
* </p>
* @version 1.0.0
* @author Dylan
* @since 2020/2/27
* @param e
*/
@ExceptionHandler({BaseException.class,BusinessException.class})
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public R customExceptionHandler(BaseException e) {
sysLog();
log.info("自定義異常 ---> {}",e);
return R.error(e.getCode(),e.getMsg());
}
/**
* <p>
* 其他類型的異常處理
* </p>
* @version 1.0.0
* @author Dylan
* @since 2020/2/27
* @param e
*/
@ExceptionHandler({Exception.class})
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public R customExceptionHandler(Exception e) {
sysLog();
log.info("未知的運(yùn)行異常 ---> ",e);
return R.error();
}
/**
* <p>
* 參數(shù)異常處理
* </p>
* @version 1.0.0
* @author Dylan-haiji
* @since 2020/2/28
* @param exception
*/
@ExceptionHandler(value= MethodArgumentNotValidException.class)
public R methodNotValidHandler(MethodArgumentNotValidException exception) {
sysLog();
log.info("參數(shù)異常 ---> ",exception);
List<FieldError> fieldErrors = exception.getBindingResult().getFieldErrors();
return R.error(fieldErrors.get(0).getDefaultMessage());
}
/**
* <p>
* 統(tǒng)一日志輸出
* </p>
* @version 1.0.0
* @author Dylan-haiji
* @since 2020/2/28
* @param
* @return void
*/
private void sysLog(){
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
String requestUri = request.getRequestURI();
log.info("異常 method ---> {}",request.getMethod());
log.info("異常 requestURI ---> {}",requestUri);
}
}1.2 基礎(chǔ)異常
public class BaseException extends RuntimeException{
private Integer code;
private String msg;
public BaseException(Integer code, String msg){
this.code = code;
this.msg = msg;
}
public BaseException( String msg){
this.code = 500;
this.msg = msg;
}
}1.3 業(yè)務(wù)參數(shù)異常
public class BusinessException extends BaseException {
public BusinessException(Integer code, String msg) {
super(code, msg);
}
public BusinessException() {
super(ConstantUtils.BUSINESS_DATA);
}
public BusinessException(String msg) {
super(msg);
}
}二.驗(yàn)證
通過上面的配置,我們可以進(jìn)行全局的異常捕獲,接下來我們以參數(shù)驗(yàn)證為例進(jìn)行驗(yàn)證是否可用!
2.1 定義實(shí)體類
public class Demo implements Serializable {
@NotBlank(message = "請(qǐng)選擇時(shí)間")
private String endDate;
@NotBlank(message = "請(qǐng)選擇范圍類型")
private String value;
}2.2 定義接口
@PostMapping(value = "list")
public R getOverView(@RequestBody @Valid Demo demo){
return R.ok();
}
這是我們調(diào)用接口,直傳一個(gè)參數(shù)!達(dá)到了我們的預(yù)期效果

當(dāng)然我們處理業(yè)務(wù)的時(shí)候也可進(jìn)行異常的拋出,這樣也會(huì)進(jìn)行全局的捕獲!

這樣的接口返回就非常的友好了!
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java如何實(shí)現(xiàn)遠(yuǎn)程文件下載到本地目錄
本文介紹了如何使用Java來實(shí)現(xiàn)遠(yuǎn)程文件的下載功能,主要通過HTTPS路徑下載文件到本地目錄,詳細(xì)介紹了相關(guān)代碼和測(cè)試步驟,并提供了實(shí)際案例供參考,本文旨在幫助需要實(shí)現(xiàn)文件下載功能的開發(fā)者快速掌握核心技術(shù)2024-10-10
使用String轉(zhuǎn)換到Map結(jié)構(gòu)
這篇文章主要介紹了使用String轉(zhuǎn)換到Map結(jié)構(gòu),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11
Java并發(fā)LinkedBlockingQueue源碼分析
這篇文章主要為大家介紹了Java并發(fā)LinkedBlockingQueue源碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02
Java struts2 package元素配置及實(shí)例解析
這篇文章主要介紹了Java struts2 package元素配置及實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11
SpringBoot連接MySql數(shù)據(jù)庫的原理及代碼示例
SpringBoot是一款流行的Java開發(fā)框架,它可以輕松地連接各種類型的數(shù)據(jù)庫,包括關(guān)系型數(shù)據(jù)庫和非關(guān)系型數(shù)據(jù)庫,本文將介紹SpringBoot是如何連接數(shù)據(jù)庫的,包括其原理和代碼示例,需要的朋友可以參考下2023-07-07
JavaWeb 獲取應(yīng)用根路徑的實(shí)踐指南
本文全面介紹JavaWeb中獲取應(yīng)用根路徑的多種方法,涵蓋Servlet、JSP、SpringBoot等場(chǎng)景,強(qiáng)調(diào)相對(duì)路徑與物理路徑的合理使用及安全性驗(yàn)證,確保不同環(huán)境下的路徑處理一致性和正確性,感興趣的朋友一起看看吧2025-08-08
Spring容器-BeanFactory和ApplicationContext使用詳解
這篇文章主要為大家介紹了Spring容器-BeanFactory和ApplicationContext的使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04

