最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

springboot全局異常處理方式@ControllerAdvice和@ExceptionHandler

 更新時間:2024年11月11日 14:28:00   作者:比嗨皮兔  
文章總結(jié)了個人在處理全局異常處理時的經(jīng)驗,包括使用`StatusEnum`來定義狀態(tài)碼,旨在為讀者提供參考,并鼓勵大家支持腳本之家

springboot全局異常處理方式

GlobalException

import lombok.extern.slf4j.Slf4j;
import org.springframework.util.StringUtils;
import org.springframework.validation.BindException;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
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;

@Slf4j
@ResponseBody
@ControllerAdvice
public class GlobalException {

	/**
	 * 系統(tǒng)異常處理
	 *
	 * @param ex 異常
	 * @return
	 */
	@ExceptionHandler(value = Throwable.class)
	public Result defaultErrorHandler(Exception ex) {
		log.error("系統(tǒng)異常:{}", ex);
		return Result.error(StatusEnum.SYSTEM_ERROR);
	}

	/**
	 * BindException
	 *
	 * @param e 異常
	 * @return
	 */
	@ExceptionHandler(BindException.class)
	public Result handleBingException(BindException e) {
		FieldError fieldError = e.getFieldError();
		String message = fieldError.getDefaultMessage();
		return Result.error(StatusEnum.SYSTEM_ERROR);
	}

	/**
	 * 處理 @RequestBody參數(shù)校驗異常
	 *
	 * @param e 異常信息
	 * @return
	 */
	@ExceptionHandler(MethodArgumentNotValidException.class)
	public Result handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
		BindingResult bindingResult = e.getBindingResult();
		FieldError fieldError = bindingResult.getFieldError();
		String code = fieldError.getCode();
		String message = fieldError.getDefaultMessage();
		return Result.error(errorCode, message);
	}
}

result

@Data
public class Result<T> {

	/**
	 * 狀態(tài)值
	 */
	private Boolean status;

	/**
	 * 狀態(tài)碼
	 */
	private String code;

	/**
	 * 狀態(tài)信息
	 */
	private String message;

	/**
	 * 返回的結(jié)果
	 */
	private T result;

	/**
	 * 構(gòu)造函數(shù)
	 *
	 * @param code    狀態(tài)碼
	 * @param message 提示信息
	 */
	public Result(String code, String message) {
		this.status = false;
		this.code = code;
		this.message = message;
	}

	/**
	 * 構(gòu)造函數(shù)
	 *
	 * @param status  狀態(tài)
	 * @param code    狀態(tài)碼
	 * @param message 提示信息
	 */
	public Result(Boolean status, String code, String message) {
		this.status = status;
		this.code = code;
		this.message = message;
	}

	/**
	 * 構(gòu)造函數(shù)
	 *
	 * @param status  狀態(tài)
	 * @param code    狀態(tài)碼
	 * @param message 提示信息
	 * @param result  結(jié)果
	 */
	public Result(Boolean status, String code, String message, T result) {
		this.status = status;
		this.code = code;
		this.message = message;
		this.result = result;
	}

	// --------- 靜態(tài)方法 ----------

	/**
	 * 枚舉的狀態(tài)碼
	 */
	private static final String CODE;

	/**
	 * 枚舉的提示信息
	 */
	private static final String MESSAGE;

	/**
	 * 500
	 */
	private static final String ERROR_CODE;

	/**
	 * 成功返回的狀態(tài)碼
	 */
	private static final String SUCCESS_CODE;

	/**
	 * 成功返回的狀態(tài)信息
	 */
	private static final String SUCCESS_MSG;

	/**
	 * 靜態(tài)代碼塊初始化
	 */
	static {
		// 成功返回的狀態(tài)碼
		CODE = "getCode";
		// 枚舉的提示信息
		MESSAGE = "getMessage";
		// 異常碼
		ERROR_CODE = "500";
		// 成功返回的狀態(tài)碼
		SUCCESS_CODE = "200";
		// 成功返回的狀態(tài)信息
		SUCCESS_MSG = "操作成功";
	}

	/**
	 * 操作成功
	 *
	 * @return 返回結(jié)果
	 */
	public static Result success() {
		return new Result(true, SUCCESS_CODE, SUCCESS_MSG);
	}

	/**
	 * 操作成功
	 *
	 * @return 返回結(jié)果
	 */
	public static <T> Result success(T result) {
		return new Result(true, SUCCESS_CODE, SUCCESS_MSG, result);
	}

	/**
	 * 返回異常的
	 *
	 * @param t   泛型枚舉
	 * @param <T> 泛型
	 * @return 返回 result
	 */
	public static <T extends Enum> Result error(T t) {
		return error(t, CODE, MESSAGE, null);
	}

	/**
	 * 返回異常的
	 *
	 * @param t       泛型枚舉
	 * @param message 提示信息
	 * @param <T>     泛型
	 * @return 返回 result
	 */
	public static <T extends Enum> Result error(T t, String message) {
		return error(t, CODE, MESSAGE, message);
	}

	/**
	 * 返回異常的
	 *
	 * @param code 狀態(tài)碼
	 * @return 返回 result
	 */
	public static Result error(String code) {
		return new Result(code, null);
	}

	/**
	 * 返回異常的
	 *
	 * @param code    狀態(tài)碼
	 * @param message 提示信息
	 * @return 返回 result
	 */
	public static Result error(String code, String message) {
		return new Result(code, message);
	}

	/**
	 * 返回異常的
	 *
	 * @param t          返回的枚舉
	 * @param codeMethod 狀態(tài)的方法
	 * @param msgMethod  提示信息的狀態(tài)碼
	 * @param <T>        泛型
	 * @return 返回 result 對象
	 */
	public static <T extends Enum> Result error(T t, String codeMethod, String msgMethod, String message) {
		try {
			Class<?> aClass = t.getClass();
			String code = aClass.getMethod(codeMethod).invoke(t).toString();
			message = StringUtils.isEmpty(message) ? aClass.getMethod(msgMethod).invoke(t).toString() : message;
			return new Result(code, message);
		} catch (Exception e) {
			return new Result(ERROR_CODE, e.getMessage());
		}
	}

	// ---- 重寫的方法 ----

	/**
	 * 重寫 toString 方法
	 *
	 * @return 返回JSON字符串
	 */
	@Override
	public String toString() {
		return JSON.toJSONString(this);
	}

	/**
	 * toJsonString 方法
	 *
	 * @return 返回JSON字符串
	 */
	public String toJsonString() {
		return JSON.toJSONString(this);
	}
}

StatusEnum

public enum StatusEnum {

	/**
	 * 操作成功
	 */
	OK("200", "操作成功"),

	/**
	 * 沒有訪問權(quán)限
	 */
	NOT_PERMISSION("403", "沒有訪問權(quán)限"),

	/**
	 * 沒有登錄或者登錄已經(jīng)過期
	 */
	NOT_LOGIN("405", "沒有登錄或者登錄已經(jīng)過期"),

	/**
	 * 系統(tǒng)繁忙,請稍后再試
	 */
	SYSTEM_ERROR("500", "系統(tǒng)繁忙,請稍后再試");

	/**
	 * 構(gòu)造函數(shù)
	 *
	 * @param code    狀態(tài)碼
	 * @param message 提示信息
	 */
	StatusEnum(String code, String message) {
		this.code = code;
		this.message = message;
	}

	/**
	 * 狀態(tài)碼
	 */
	private String code;

	/**
	 * 提示信息
	 */
	private String message;

	/**
	 * 獲取 狀態(tài)碼
	 *
	 * @return 狀態(tài)碼
	 */
	public String getCode() {
		return code;
	}

	/**
	 * 獲取 提示信息
	 *
	 * @return 提示信息
	 */
	public String getMessage() {
		return message;
	}
}

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • java實現(xiàn)mp3合并的方法

    java實現(xiàn)mp3合并的方法

    這篇文章主要介紹了java實現(xiàn)mp3合并的方法,是Java操作多媒體文件的一個典型應(yīng)用,非常具有參考借鑒價值,需要的朋友可以參考下
    2014-10-10
  • springboot利用aop實現(xiàn)接口異步(進(jìn)度條)的全過程

    springboot利用aop實現(xiàn)接口異步(進(jìn)度條)的全過程

    我們在開發(fā)中,調(diào)用第三方接口時,往往是提交數(shù)據(jù),要異步去獲取數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于springboot利用aop實現(xiàn)接口異步(進(jìn)度條)的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-01-01
  • Java出現(xiàn):JWT strings must contain exactly 2 period characters. Found: 0的常見原因及解決方案

    Java出現(xiàn):JWT strings must contain exactly&

    這篇文章主要介紹了JWT令牌解析失敗的原因和解決方法,包括Header、Payload和Signature三段式結(jié)構(gòu),常見錯誤原因,通用解決方案以及額外注意點,需要的朋友可以參考下
    2026-01-01
  • java實現(xiàn)文件上傳和下載

    java實現(xiàn)文件上傳和下載

    這篇文章主要為大家詳細(xì)介紹了java實現(xiàn)文件上傳和下載,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • java獲取當(dāng)前日期和時間的二種方法分享

    java獲取當(dāng)前日期和時間的二種方法分享

    這篇文章主要介紹了java獲取當(dāng)前日期和時間的二種方法,需要的朋友可以參考下
    2014-03-03
  • JAVAlogback日志管理詳解

    JAVAlogback日志管理詳解

    本篇文章主要介紹了在SpringBoot中使用Logback管理記錄日志,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2021-09-09
  • Java實例講解Comparator的使用

    Java實例講解Comparator的使用

    我們先介紹一下comparator,我們后文稱為比較器。比較器實際上是一個實現(xiàn)了comparator interface是一個實例,在Arrays.sort方法我們可以提供這樣一個實例,即使被排序的object沒有實現(xiàn)comparable接口,我們也可以排序了
    2022-11-11
  • Mybatis Plus Join使用方法示例詳解

    Mybatis Plus Join使用方法示例詳解

    這篇文章主要介紹了Mybatis Plus Join使用方法示例詳解,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友一起看看吧
    2025-06-06
  • Java基于二分搜索樹、鏈表的實現(xiàn)的集合Set復(fù)雜度分析實例詳解

    Java基于二分搜索樹、鏈表的實現(xiàn)的集合Set復(fù)雜度分析實例詳解

    這篇文章主要介紹了Java基于二分搜索樹、鏈表的實現(xiàn)的集合Set復(fù)雜度分析,結(jié)合實例形式詳細(xì)分析了Java基于二分搜索樹、鏈表的實現(xiàn)的集合Set復(fù)雜度分析相關(guān)操作技巧與注意事項,需要的朋友可以參考下
    2020-03-03
  • springboot中spring.profiles.include的妙用分享

    springboot中spring.profiles.include的妙用分享

    這篇文章主要介紹了springboot中spring.profiles.include的妙用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08

最新評論

康定县| 来安县| 漾濞| 宣化县| 罗源县| 麦盖提县| 南开区| 黄浦区| 榆林市| 乌鲁木齐市| 莫力| 大名县| 阳朔县| 当涂县| 北流市| 唐海县| 承德县| 东城区| 台中市| 连南| 左权县| 江城| 德格县| 铜梁县| 五原县| 什邡市| 班戈县| 巴东县| 上犹县| 类乌齐县| 汤阴县| 从江县| 航空| 武平县| 红原县| 巴林右旗| 晴隆县| 霍州市| 汶上县| 安徽省| 鹰潭市|