SpringBoot项目中全局异常处理

1、参数不满足条件异常类定义 

/**
 *@description:参数不满足异常处理
 *@author
 *@date: 2019年8月10日 上午14:17:56
 */
public class PromptException extends RuntimeException  {

	private static final long serialVersionUID = 1L;
	private int code;
	private String  msg;
	public int getCode() {
		return code;
	}
	public void setCode(int code) {
		this.code = code;
	}
	public String getMsg() {
		return msg;
	}
	public void setMsg(String msg) {
		this.msg = msg;
	}
	/**
	 * @param code
	 * @param msg
	 */
	public PromptException(int code, String msg) {
		super();
		this.code = code;
		this.msg = msg;
	}
}

2、不满业务条件异常类定义


/**
 *@description:不满足业务条件异常
 *@author
 *@date: 2019年8月10日 上午14:17:56
 */
public class BusException extends RuntimeException  {

	private static final long serialVersionUID = 1L;
	
	private int code;
	private String  msg;
	public int getCode() {
		return code;
	}
	public void setCode(int code) {
		this.code = code;
	}
	public String getMsg() {
		return msg;
	}
	public void setMsg(String msg) {
		this.msg = msg;
	}
	/**
	 * @param code
	 * @param msg
	 */
	public BusException(int code, String msg) {
		super();
		this.code = code;
		this.msg = msg;
	}	
}

3、全局异常处理类

/**
 * @Title: GloabException
 * @Description:
 * @author: liuchuanhong
 * @date 2020年9月25日 下午2:56:09
 */
@ControllerAdvice
@ResponseBody
@Slf4j
public class GloabException {

	@ExceptionHandler(value = Exception.class)
	public String hanleException(Exception e) {
		if (e instanceof BusException) {
			BusException bus = (BusException) e;
			Result res = ResultUtils.failed(bus.getCode(), bus.getMsg());
			return JSON.toJSONString(res);
		} else if (e instanceof PromptException) {
			PromptException bus = (PromptException) e;
			Result res = ResultUtils.failed(bus.getCode(), bus.getMsg());
			return JSON.toJSONString(res);
		} else {
			e.printStackTrace();
			log.error("异常错误", e.getMessage());
			Result res = ResultUtils.failed(ResultEnum.FAIL.getCode(), ResultEnum.FAIL.getDesc());
			return JSON.toJSONString(res);
		}
	}
    @ExceptionHandler({ConversionNotSupportedException.class, HttpMessageNotWritableException.class })
	public String server500(RuntimeException ex) {
		Result res = ResultUtils.failed(ResultEnum.FAIL.getCode(), ResultEnum.FAIL.getDesc());
		return JSON.toJSONString(res);
	}

	// 405错误
	@ExceptionHandler({ HttpRequestMethodNotSupportedException.class })
	public String request405(HttpRequestMethodNotSupportedException ex) {
		Result res = ResultUtils.failed(ResultEnum.FAIL405.getCode(), ResultEnum.FAIL405.getDesc());
		return JSON.toJSONString(res);
	}

	// 400错误
	@ExceptionHandler({ MissingServletRequestParameterException.class })
	public String requestMissingServletRequest(MissingServletRequestParameterException ex) {
		Result res = ResultUtils.failed(ResultEnum.FAIL400.getCode(), ResultEnum.FAIL400.getDesc());
		return JSON.toJSONString(res);
	}

	// 404错误
	@ExceptionHandler(NoHandlerFoundException.class)
    @ResponseStatus(value = HttpStatus.NOT_FOUND)
	public String requestMissingServletRequest(NoHandlerFoundException ex) {
		Result res = ResultUtils.failed(ResultEnum.FAIL404.getCode(), ResultEnum.FAIL404.getDesc());
		return JSON.toJSONString(res);
	}


	// Valid参数校验失败返回
	@ExceptionHandler(MethodArgumentNotValidException.class)
	@ResponseStatus(HttpStatus.BAD_REQUEST)
	public String requestMissingServletRequest(MethodArgumentNotValidException ex) {
		Result res = new Result();
		BindingResult result = ex.getBindingResult();
		List<FieldError> fieldErrors = result.getFieldErrors();
		for (FieldError item : fieldErrors) {
			res = ResultUtils.failed(ResultEnum.FAIL400.getCode(), item.getDefaultMessage());
			break;
		}
		return JSON.toJSONString(res);
	}

}

注:需要配置MVC不拦截404等异常

  mvc:
   throw-exception-if-no-handler-found: true   
  resources:
    add-mappings: false   

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值