1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Springboot优雅处理异常 全局异常处理

Springboot优雅处理异常 全局异常处理

时间:2020-02-06 02:37:49

相关推荐

Springboot优雅处理异常 全局异常处理

**

开始

**

异常接口

自定义基础接口类

首先定义一个基础的接口类,自定义的错误描述枚举类需实现该接口。

package mon;public interface BaseErrorInfo {String getResCode();String getRestMsg();}

自定义的异常信息

自定义枚举类

然后我们这里在自定义一个枚举类,并实现该接口。

package mon;public enum AbnoNum implements BaseErrorInfo {/****/SUCCESS("200", "成功"),USERNAME_IS_NULL("-1", "用户名或密码为空"),USERPASS_IS_ERROR("-3", "密码错误"),USERNAME_IS_ENIST("-4", "用户不存在"),NullPoin("-5","空指针异常"),//秒杀订单异常MIAOSHAGOODS_IS_ENIST("300","已售罄"),ORDER_REPEAT("301","订单已存在"),order_error("302","订单创建失败"),//地址添加ADDRESS_ERROR("402","地址添加异常"),//密码修改错误PASSWORD_ERROR("503","密码修改失败"),OLDPASS_ERROR("504","原密码错误"),TWOPASS_ERROR("505","两次密码输入不一致"),NEWPASS_ERROR("506","新密码和原密码一样"),REQUEST("506","请求非法"),//秒杀模块ACCESS_LIMIT_FREQUENTLY("506","请求频繁"),;private String resuleCode;private String resuleMsg;AbnoNum(String resuleCode, String resuleMsg) {this.resuleCode = resuleCode;this.resuleMsg = resuleMsg;}@Overridepublic String getResCode() {return resuleCode;}@Overridepublic String getRestMsg() {return resuleMsg;}}

自定义异常类

然后我们在来自定义一个异常类,用于处理我们发生的业务异常。

package mon;/*** @Author kalista* @Description* @Date /7/15 10:08**/public class ResultBean<T> {private String code;private String message;private Object data;private ResultBean() {}public static ResultBean error(BaseErrorInfo baseErrorInfo) {ResultBean resultBean = new ResultBean();resultBean.setCode(baseErrorInfo.getResCode());resultBean.setMessage(baseErrorInfo.getRestMsg());return resultBean;}public static ResultBean success() {ResultBean resultBean = new ResultBean();resultBean.setCode(AbnoNum.SUCCESS.getResCode());resultBean.setMessage(AbnoNum.SUCCESS.getRestMsg());return resultBean;}public static ResultBean success(Object data) {ResultBean resultBean = new ResultBean();resultBean.setCode(AbnoNum.SUCCESS.getResCode());resultBean.setMessage(AbnoNum.SUCCESS.getRestMsg());resultBean.setData(data);return resultBean;}public static ResultBean error(String errorcode, String errormsg) {ResultBean resultBean = new ResultBean();resultBean.setCode(errorcode);resultBean.setMessage(errormsg);return resultBean;}public static ResultBean error(String message) {ResultBean resultBean = new ResultBean();resultBean.setCode(AbnoNum.NullPoin.getResCode());resultBean.setMessage(message);return resultBean;}public String getCode() {return code;}public void setCode(String code) {this.code = code;}public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}public Object getData() {return data;}public void setData(Object data) {this.data = data;}}

异常实体类

自定义数据格式

顺便这里我们定义一下数据的传输格式。

package com.etc.exitpation;import lombok.Data;/*** 处理业务异常*/@Datapublic class BizExiption extends RuntimeException {/*** 错误码*/protected String errorcode;/*** 错误信息*/protected String errormsg;public BizExiption() {super();}public BizExiption(String resCode, String restMsg) {this.errorcode =resCode;this.errormsg = restMsg;}}

异常处理类

自定义全局异常处理类

最后我们在来编写一个自定义全局异常处理的类。

package com.etc.exitpation;import mon.ResultBean;import lombok.extern.slf4j.Slf4j;import org.springframework.web.bind.annotation.ControllerAdvice;import org.springframework.web.bind.annotation.ExceptionHandler;import org.springframework.web.bind.annotation.ResponseBody;import org.springframework.web.servlet.ModelAndView;/*** 勇于处理发生的业务异常*/@Slf4j@ControllerAdvicepublic class MyexitHeader {@ResponseBody@ExceptionHandler(value = com.etc.exitpation.BizExiption.class)public ModelAndView biz(com.etc.exitpation.BizExiption e) {log.error("发生了业务异常{}", e.getMessage());ModelAndView modelAndView = new ModelAndView("login");modelAndView.addObject("msg", e.getErrormsg());return modelAndView;}/*** 处理空* @param e* @return*/@ResponseBody@ExceptionHandler(value = NullPointerException.class)public ModelAndView Nullposin(com.etc.exitpation.BizExiption e) {log.error("发生了空调指针异常{}", e.getMessage());ModelAndView modelAndView = new ModelAndView("login");modelAndView.addObject("msg", e.getErrormsg());return modelAndView;}/*** 处理其他异常* @param e* @return*/@ResponseBody@ExceptionHandler(value = Exception.class)public ResultBean Nullposin(Exception e) {e.printStackTrace();log.error("发生了其他异常{}", e.getMessage());return ResultBean.error(e.getMessage());}}

测试 制造一个异常 就会被处理

throw new BizExiption(AbnoNum.USERNAME_IS_NULL.getResCode(), AbnoNum.USERNAME_IS_NULL.getRestMsg());

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。