package com.rz.config;
import com.rz.common.ex.BusinessException;
import com.rz.utils.ResultInfo;
import org.apache.shiro.authz.UnauthorizedException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.web.HttpMediaTypeNotSupportedException;
import org.springframework.web.HttpRequestMethodNotSupportedException;
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.bind.annotation.ResponseStatus;
/**
* 全局异常处理
*
*/
@ControllerAdvice
public class GlobalExceptionHandler {
private Logger logger = LoggerFactory.getLogger(this.getClass());
/**
* 400 - Bad Request
*/
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(HttpMessageNotReadableException.class)
@ResponseBody
public ResultInfo<Boolean> handleHttpMessageNotReadableException(HttpMessageNotReadableException e) {
logger.error("参数解析失败!", e);
return new ResultInfo<>("400", "参数解析失败!");
}
/**
* 405 - Method Not Allowed
*/
@ResponseStatus(HttpStatus.METHOD_NOT_ALLOWED)
@ExceptionHandler(HttpRequestMethodNotSupportedException.class)
@ResponseBody
public ResultInfo<Boolean> handleHttpRequestMethodNotSupportedException(HttpRequestMethodNotSupportedException e) {
logger.error("不支持当前请求方法!", e);
return new ResultInfo<>("405", "不支持当前请求方法!");
}
/**
* 415 - Unsupported Media Type
*/
@ResponseStatus(HttpStatus.UNSUPPORTED_MEDIA_TYPE)
@ExceptionHandler(HttpMediaTypeNotSupportedException.class)
@ResponseBody
public ResultInfo<Boolean> handleHttpMediaTypeNotSupportedException(
HttpMediaTypeNotSupportedException e) {
logger.error("不支持当前媒体类型!", e);
return new ResultInfo<>("415", "不支持当前媒体类型!");
}
/**
* 500 - Internal Server Error
*/
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
@ExceptionHandler(Exception.class)
@ResponseBody
public ResultInfo<Boolean> handleException(Exception e) {
if(e instanceof BusinessException){
BusinessException ex = (BusinessException) e;
return new ResultInfo<>(ex.getCode(), ex.getMessage());
}
logger.error("服务运行异常!", e);
e.printStackTrace();
return new ResultInfo<>("500", "服务运行异常!");
}
/*
* 403 - 没有权限
*/
@ResponseStatus(HttpStatus.FORBIDDEN)
@ExceptionHandler(UnauthorizedException.class)
@ResponseBody
public ResultInfo<Boolean> handleUnauthorizedException(UnauthorizedException e) {
logger.error("没有权限!", e);
return new ResultInfo<>("403","没有权限!");
}
}
springboot全局异常处理
最新推荐文章于 2025-06-16 10:16:49 发布
本文详细介绍了Spring框架中全局异常处理的实现方式,包括不同HTTP状态码对应的异常处理,如参数解析失败、不支持的请求方法、不支持的媒体类型等,并展示了如何处理业务异常和未授权访问。
1万+

被折叠的 条评论
为什么被折叠?



