springBoot全局异常

现象:
监听全局异常,自定义异常抛出

方法:
全局异常处理:@RestControllerAdvice 监听全局异常
统一异常处理:@ExceptionHandler(Exception.class):用在方法上面表示遇到这个异常就执行以下方法。

1:设置全局异常监听类、设置方法来设置监听异常类型
在这里插入图片描述
2:监听全局异常 自定义提示语句返回、适合放到类最后处理!
在这里插入图片描述

自定义异常:
1:自定义异常类型类:
在这里插入图片描述
2:在程序中抛出自定义异常类
在这里插入图片描述
3:全局监听自定义异常处理
在这里插入图片描述
代码:

1-自定义异常
//package com.yh.common.exception;
//
///**
// * 版本号异常
// */
//public class VersionChangeException extends RuntimeException {
//
//    private Integer code;
//
//    public VersionChangeException(Integer code) {
//        super("数据已被更改,请刷新页面!");
//        this.code = code;
//    }
//
//    public Integer getCode() {
//        return code;
//    }
//}

项目多种异常监听 记录下
package com.yh.common.exception;

import com.yh.common.util.JsonUtil;
import feign.FeignException;
import lombok.extern.slf4j.Slf4j;
import org.hibernate.StaleObjectStateException;
import org.springframework.http.HttpStatus;
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.*;

import java.util.List;


@RestControllerAdvice
@Slf4j
public class RestExceptionHandler {

	@ExceptionHandler(ServiceException.class)
	@ResponseBody
	@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    public ErrorResult serviceExceptionHandler(ServiceException e) {
		log.error("controller advice rest exception:", e);
		ErrorResult ertn = new ErrorResult(e.getCode(), e.getMessage()) ;
        return ertn;
    }  
	 
	
	@ExceptionHandler({MethodArgumentNotValidException.class, BindException.class})
	@ResponseBody
	@ResponseStatus(HttpStatus.BAD_REQUEST)
	public ErrorResult validatorExceptionHandler(Exception exception) {
		log.error("controller advice rest exception:", exception);
		BindingResult bindResult = null;
		if (exception instanceof BindException) {
			bindResult = ((BindException) exception).getBindingResult();
		} else if (exception instanceof MethodArgumentNotValidException) {
			bindResult = ((MethodArgumentNotValidException) exception).getBindingResult();
		}
		String msg = "";
		List<FieldError> fieldErrors=bindResult.getFieldErrors();
        for (FieldError error:fieldErrors){
        	msg += error.getDefaultMessage()+";";
            log.error(error.getField()+":"+error.getDefaultMessage());
        }
        if(msg.length()>0){
        	msg= msg.substring(0,msg.length()-1);
		}
		ErrorResult ertn = new ErrorResult(ErrorCodeEnum.ERRPR_INPUT.getCode(), msg) ;
        return ertn;
    }

	@ExceptionHandler({FeignException.class})
	@ResponseBody
	@ResponseStatus(HttpStatus.BAD_REQUEST)
    public ErrorResult feignExceptionHandler(FeignException e){
		String msg = e.contentUTF8();
		log.error(msg);
		ErrorResult ertn = JsonUtil.toObject(msg, ErrorResult.class) ;
		return ertn;
	}

    @ExceptionHandler(value = HttpReqException.class)
	@ResponseBody
	@ResponseStatus(HttpStatus.BAD_REQUEST)
    public ErrorResult httpReqExceptionHandler(HttpReqException e){
		log.error("controller advice rest exception:", e);
		return new ErrorResult(e.getCode(), e.getMessage()) ;
	}

	@ExceptionHandler(value = StaleObjectStateException.class)
	@ResponseBody
	@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
	public ErrorResult VersionChangeExceptionHandler(StaleObjectStateException e){
		log.error("controller advice rest exception:", e);
		return new ErrorResult(ErrorCodeEnum.VERSION_ERROR);
	}

	@ExceptionHandler(Exception.class)
	@ResponseBody
	@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
	public ErrorResult ExceptionHandler(Exception e) {
		log.error("controller advice rest exception:", e);
		ErrorResult ertn = new ErrorResult(ErrorCodeEnum.SYSTEM_ERROR) ;
		return ertn;
	}


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值