做网站反复修改,WordPress网站转APP插件,南海大良网站建设,网站建设一秒互联前言
在前后端开发中#xff0c;后端接口返回的数据都是JSON格式的#xff0c;但是后端可能会出现一些可以未知从异常#xff0c;在后端抛出这些异常的时候#xff0c;也需要返回相同格式的JSON数据#xff0c;这时候就需要我们设置全局异常处理器。在后端开发中#xf…前言
在前后端开发中后端接口返回的数据都是JSON格式的但是后端可能会出现一些可以未知从异常在后端抛出这些异常的时候也需要返回相同格式的JSON数据这时候就需要我们设置全局异常处理器。在后端开发中需要对一些条件做判断也可以抛出自定义的异常。话不多说直接上代码
代码
自定义异常
/*** 业务异常*/
public final class ServiceException extends RuntimeException {private static final long serialVersionUID 1L;/*** 错误码*/private Integer code;/*** 错误提示*/private String message;/*** 错误明细内部调试错误* p* 和 {CommonResult # getDetailMessage()} 一致的设计*/private String detailMessage;/*** 空构造方法避免反序列化问题*/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 {/*** 请求方式不支持*/ExceptionHandler(HttpRequestMethodNotSupportedException.class)public AjaxResult handleHttpRequestMethodNotSupported(HttpRequestMethodNotSupportedException e,HttpServletRequest request){String requestURI request.getRequestURI();log.error(请求地址{},不支持{}请求, requestURI, e.getMethod());return AjaxResult.error(e.getMessage());}/*** 业务异常*/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());}/*** 拦截未知的运行时异常*/ExceptionHandler(RuntimeException.class)public AjaxResult handleRuntimeException(RuntimeException e, HttpServletRequest request){String requestURI request.getRequestURI();log.error(请求地址{},发生未知异常., requestURI, e);return AjaxResult.error(e.getMessage());}/*** 系统异常*/ExceptionHandler(Exception.class)public AjaxResult handleException(Exception e, HttpServletRequest request){String requestURI request.getRequestURI();log.error(请求地址{},发生系统异常., 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 HashMapString, Object {private static final long serialVersionUID 1L;/*** 状态码*/public static final String CODE_TAG code;/*** 返回内容*/public static final String MSG_TAG msg;/*** 数据对象*/public static final String DATA_TAG data;/*** 初始化一个新创建的 AjaxResult 对象使其表示一个空消息。*/public AjaxResult() {}/*** 初始化一个新创建的 AjaxResult 对象** param code 状态码* param msg 返回内容*/public AjaxResult(int code, String msg) {super.put(CODE_TAG, code);super.put(MSG_TAG, msg);}/*** 初始化一个新创建的 AjaxResult 对象** param code 状态码* param msg 返回内容* param data 数据对象*/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(操作成功);}/*** 返回成功数据** return 成功消息*/public static AjaxResult success(Object data) {return AjaxResult.success(操作成功, data);}/*** 返回成功消息** param msg 返回内容* return 成功消息*/public static AjaxResult success(String msg) {return AjaxResult.success(msg, null);}/*** 返回成功消息** param msg 返回内容* param data 数据对象* return 成功消息*/public static AjaxResult success(String msg, Object data) {return new AjaxResult(HttpStatus.SUCCESS, msg, data);}/*** 返回警告消息** param msg 返回内容* return 警告消息*/public static AjaxResult warn(String msg) {return AjaxResult.warn(msg, null);}/*** 返回警告消息** param msg 返回内容* param data 数据对象* return 警告消息*/public static AjaxResult warn(String msg, Object data) {return new AjaxResult(HttpStatus.WARN, msg, data);}/*** 返回错误消息** return*/public static AjaxResult error() {return AjaxResult.error(操作失败);}/*** 返回错误消息** param msg 返回内容* return 警告消息*/public static AjaxResult error(String msg) {return AjaxResult.error(msg, null);}/*** 返回错误消息** param msg 返回内容* param data 数据对象* return 警告消息*/public static AjaxResult error(String msg, Object data) {return new AjaxResult(HttpStatus.ERROR, msg, data);}/*** 返回错误消息** param code 状态码* param msg 返回内容* return 警告消息*/public static AjaxResult error(int code, String msg) {return new AjaxResult(code, msg, null);}/*** 链式调用** param key 键* param value 内容* return 警告消息*/Overridepublic AjaxResult put(String key, Object value) {super.put(key, value);return this;}
}