java全局处理异常

使用@ControllerAdvice横切所有controller,再使用@ExceptionHandler处理各种异常

@ControllerAdvice
@Slf4j
public class GlobalExceptionHandler {

	private GlobalExceptionHandler() {
	}
	
	/**
	 * 处理@Valid校验失败的异常,加大括号可传数组对多种异常进行通用处理
	 */
	@ExceptionHandler({MethodArgumentNotValidException.class})
	public ResponseEntity<Result<?>> methodArgumentNotValidException(MethodArgumentNotValidException e) {
		List<FieldError> errors = e.getBindingResult().getFieldErrors();
		StringBuilder builder = new StringBuilder();
		for(int i=0; i<errors.size(); i++){
			FieldError error = error.get(i);
			String message = StringUtils.isNotBlank(error.getDefaultMessage())?error.getDefaultMessage() : "参数异常";
			builder.append(error.getField()).append(message);
			if(i <errors.size() -1) {
				builder.append(";");
			}
		}
		Result<?> result = Result.error("12345",builder.toString());
		log.error("Params valid exception={}",e.getMessage(),e);
		return new ResponseEntity<>(result,HttpStatus.BAD_REQUEST);
	}
	// 其他需要单独处理的exception自行补充

	/**
	 * 捕获其他所有未单独处理的exception
	 */
	 @ExceptionHandler(Exception.class)
	 public ResponseEntity<Result<?>> globalHandle(Exception e) {
		String message = "系统异常";
		if(!StringUtils.isEmpty(e.getMessage())) {
			message = e.getMessage();
		}
		Result<?> result = Result.error("11111",message );
		log.error("unknown exception={}",e.getMessage(),e);
		return new ResponseEntity<>(result,HttpStatus.INTERNAL_SERVER_ERROR);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值