免費(fèi)網(wǎng)站建設(shè)作業(yè)總結(jié)seo的作用主要有
前言
在前后端開發(fā)中,后端接口返回的數(shù)據(jù)都是JSON格式的,但是后端可能會(huì)出現(xiàn)一些可以未知從異常,在后端拋出這些異常的時(shí)候,也需要返回相同格式的JSON數(shù)據(jù),這時(shí)候就需要我們?cè)O(shè)置全局異常處理器。在后端開發(fā)中,需要對(duì)一些條件做判斷,也可以拋出自定義的異常。話不多說,直接上代碼
代碼
- 自定義異常
/*** 業(yè)務(wù)異常*/
public final class ServiceException extends RuntimeException {private static final long serialVersionUID = 1L;/*** 錯(cuò)誤碼*/private Integer code;/*** 錯(cuò)誤提示*/private String message;/*** 錯(cuò)誤明細(xì),內(nèi)部調(diào)試錯(cuò)誤* <p>* 和 {CommonResult # getDetailMessage()} 一致的設(shè)計(jì)*/private String detailMessage;/*** 空構(gòu)造方法,避免反序列化問題*/public ServiceException() {}public ServiceException(String message) {this.message = message;}public ServiceException(String message, Integer code) {this.message = message;this.code = code;}public String getDetailMessage() {return detailMessage;}@Overridepublic String getMessage() {return message;}public Integer getCode() {return code;}public ServiceException setMessage(String message) {this.message = message;return this;}public ServiceException setDetailMessage(String detailMessage) {this.detailMessage = detailMessage;return this;}
}
- 定義全局異常處理
import com.juxin.insureclient.common.domain.AjaxResult;
import com.juxin.insureclient.common.utils.StringUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.HttpRequestMethodNotSupportedException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;import javax.servlet.http.HttpServletRequest;/*** 全局異常處理器*/
@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler {/*** 請(qǐng)求方式不支持*/@ExceptionHandler(HttpRequestMethodNotSupportedException.class)public AjaxResult handleHttpRequestMethodNotSupported(HttpRequestMethodNotSupportedException e,HttpServletRequest request){String requestURI = request.getRequestURI();log.error("請(qǐng)求地址'{}',不支持'{}'請(qǐng)求", requestURI, e.getMethod());return AjaxResult.error(e.getMessage());}/*** 業(yè)務(wù)異常*/@ExceptionHandler(ServiceException.class)public AjaxResult handleServiceException(ServiceException e, HttpServletRequest request){log.error(e.getMessage(), e);Integer code = e.getCode();return StringUtils.isNotNull(code) ? AjaxResult.error(code, e.getMessage()) : AjaxResult.error(e.getMessage());}/*** 攔截未知的運(yùn)行時(shí)異常*/@ExceptionHandler(RuntimeException.class)public AjaxResult handleRuntimeException(RuntimeException e, HttpServletRequest request){String requestURI = request.getRequestURI();log.error("請(qǐng)求地址'{}',發(fā)生未知異常.", requestURI, e);return AjaxResult.error(e.getMessage());}/*** 系統(tǒng)異常*/@ExceptionHandler(Exception.class)public AjaxResult handleException(Exception e, HttpServletRequest request){String requestURI = request.getRequestURI();log.error("請(qǐng)求地址'{}',發(fā)生系統(tǒng)異常.", requestURI, e);return AjaxResult.error(e.getMessage());}
}
3.返回消息格式
import com.juxin.insureclient.common.constant.HttpStatus;
import com.juxin.insureclient.common.utils.StringUtils;import java.util.HashMap;/*** 操作消息提醒*/
public class AjaxResult extends HashMap<String, Object> {private static final long serialVersionUID = 1L;/*** 狀態(tài)碼*/public static final String CODE_TAG = "code";/*** 返回內(nèi)容*/public static final String MSG_TAG = "msg";/*** 數(shù)據(jù)對(duì)象*/public static final String DATA_TAG = "data";/*** 初始化一個(gè)新創(chuàng)建的 AjaxResult 對(duì)象,使其表示一個(gè)空消息。*/public AjaxResult() {}/*** 初始化一個(gè)新創(chuàng)建的 AjaxResult 對(duì)象** @param code 狀態(tài)碼* @param msg 返回內(nèi)容*/public AjaxResult(int code, String msg) {super.put(CODE_TAG, code);super.put(MSG_TAG, msg);}/*** 初始化一個(gè)新創(chuàng)建的 AjaxResult 對(duì)象** @param code 狀態(tài)碼* @param msg 返回內(nèi)容* @param data 數(shù)據(jù)對(duì)象*/public AjaxResult(int code, String msg, Object data) {super.put(CODE_TAG, code);super.put(MSG_TAG, msg);if (StringUtils.isNotNull(data)) {super.put(DATA_TAG, data);}}/*** 返回成功消息** @return 成功消息*/public static AjaxResult success() {return AjaxResult.success("操作成功");}/*** 返回成功數(shù)據(jù)** @return 成功消息*/public static AjaxResult success(Object data) {return AjaxResult.success("操作成功", data);}/*** 返回成功消息** @param msg 返回內(nèi)容* @return 成功消息*/public static AjaxResult success(String msg) {return AjaxResult.success(msg, null);}/*** 返回成功消息** @param msg 返回內(nèi)容* @param data 數(shù)據(jù)對(duì)象* @return 成功消息*/public static AjaxResult success(String msg, Object data) {return new AjaxResult(HttpStatus.SUCCESS, msg, data);}/*** 返回警告消息** @param msg 返回內(nèi)容* @return 警告消息*/public static AjaxResult warn(String msg) {return AjaxResult.warn(msg, null);}/*** 返回警告消息** @param msg 返回內(nèi)容* @param data 數(shù)據(jù)對(duì)象* @return 警告消息*/public static AjaxResult warn(String msg, Object data) {return new AjaxResult(HttpStatus.WARN, msg, data);}/*** 返回錯(cuò)誤消息** @return*/public static AjaxResult error() {return AjaxResult.error("操作失敗");}/*** 返回錯(cuò)誤消息** @param msg 返回內(nèi)容* @return 警告消息*/public static AjaxResult error(String msg) {return AjaxResult.error(msg, null);}/*** 返回錯(cuò)誤消息** @param msg 返回內(nèi)容* @param data 數(shù)據(jù)對(duì)象* @return 警告消息*/public static AjaxResult error(String msg, Object data) {return new AjaxResult(HttpStatus.ERROR, msg, data);}/*** 返回錯(cuò)誤消息** @param code 狀態(tài)碼* @param msg 返回內(nèi)容* @return 警告消息*/public static AjaxResult error(int code, String msg) {return new AjaxResult(code, msg, null);}/*** 鏈?zhǔn)秸{(diào)用** @param key 鍵* @param value 內(nèi)容* @return 警告消息*/@Overridepublic AjaxResult put(String key, Object value) {super.put(key, value);return this;}
}