欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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)文章

  • 關(guān)于json解析多層嵌套并轉(zhuǎn)為對應(yīng)類(List)

    關(guān)于json解析多層嵌套并轉(zhuǎn)為對應(yīng)類(List)

    在進行JSON解析時,遇到多層嵌套結(jié)構(gòu)可通過遞歸或?qū)S脦靵韺崿F(xiàn),重要的是將嵌套的JSON對象準確轉(zhuǎn)化為對應(yīng)的Java類,通常需要依賴如Gson或Jackson等庫,將JSONObject轉(zhuǎn)為JavaBean時,關(guān)注字段匹配與數(shù)據(jù)類型轉(zhuǎn)換
    2024-10-10
  • myatisplus的saveOrUpdate的提交總是update問題

    myatisplus的saveOrUpdate的提交總是update問題

    這篇文章主要介紹了myatisplus的saveOrUpdate的提交總是update問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • java中通過行為參數(shù)化傳遞代碼方案

    java中通過行為參數(shù)化傳遞代碼方案

    大家好,本篇文章主要講的是java中通過行為參數(shù)化傳遞代碼方案,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-02-02
  • @DynamicUpdate //自動更新updatetime的問題

    @DynamicUpdate //自動更新updatetime的問題

    這篇文章主要介紹了@DynamicUpdate //自動更新updatetime的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Idea實現(xiàn)接口的方法上無法添加@Override注解的解決方案

    Idea實現(xiàn)接口的方法上無法添加@Override注解的解決方案

    文章介紹了在IDEA中實現(xiàn)接口方法時無法添加@Override注解的問題及其解決方法,主要步驟包括更改項目結(jié)構(gòu)中的Language level到支持該注解的版本,以及在pom.xml文件中指定maven-compiler-plugin的版本以解決自動更新后的問題
    2025-02-02
  • springboot中pom.xml文件注入test測試依賴時報錯的解決

    springboot中pom.xml文件注入test測試依賴時報錯的解決

    這篇文章主要介紹了springboot中pom.xml文件注入test測試依賴時報錯的解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java實現(xiàn)的RSA加密解密算法示例

    Java實現(xiàn)的RSA加密解密算法示例

    這篇文章主要介紹了Java實現(xiàn)的RSA加密解密算法,結(jié)合實例形式分析了java RAS加密解密算法的相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2018-01-01
  • Java_Spring之Spring5?的新特性

    Java_Spring之Spring5?的新特性

    這篇文章主要介紹了Java_Spring中Spring5?的新特性,需要利用jdk8?版本更新的內(nèi)容,依賴庫更新,感興趣的小伙伴可以參考閱讀
    2023-04-04
  • 深入了解java中的逃逸分析

    深入了解java中的逃逸分析

    這篇文章主要介紹了深入了解java中的逃逸分析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09
  • Java原生序列化和反序列化代碼實例

    Java原生序列化和反序列化代碼實例

    這篇文章主要介紹了Java原生序列化和反序列化代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02

最新評論