@RestControllerAdvice与@ControllerAdvice的区别

@RestControllerAdvice与@ControllerAdvice的区别

在学习Java全局异常处理时发现,有的自定义全局异常处理类加@RestControllerAdvice注解而有的自定义类加@ControllerAdvice注解,实际上两者与@Controller、@RestController有点类似。

@RestController 里面包含了@Controller、@ResponseBody 、 而 @RestControllerAdvice 里面也是包含了@ControllerAdvice 、@ResponseBody

@RestControllerAdvice与@ControllerAdvice使用上的区别如下
两者区别就是在方法体上面明显就是少了@ResponseBody

这是使用@ControllerAdvice 的代码
/**
 * 统一处理异常通知类
 * @author Aaron(谢胜瑜)
 */
@ControllerAdvice
@Slf4j
public class BaseExceptionHandler {

	/**
	 * 处理自定义业务异常
	 * @param serviceException
	 * @return
	 */
	@ExceptionHandler(ServiceException.class)
	@ResponseStatus(HttpStatus.BAD_REQUEST)// 设置返回的http status 状态码
	@ResponseBody
	public R exceptionHandler (ServiceException serviceException) {
		// 打印异常日志并输出错误代码定位
		log.error("业务异常", serviceException);
		return R.error(serviceException.getStatus(), serviceException.getMessage());
	}
}
这是使用@RestControllerAdvice 的代码
/**
 * 统一处理异常通知类
 * @author Aaron(谢胜瑜)
 */
@RestControllerAdvice
@Slf4j
public class BaseExceptionHandler {

	/**
	 * 处理自定义业务异常
	 * @param serviceException
	 * @return
	 */
	@ExceptionHandler(ServiceException.class)
	@ResponseStatus(HttpStatus.BAD_REQUEST) // 设置返回的http status 状态码
	public R exceptionHandler (ServiceException serviceException) {
		// 打印异常日志并输出错误代码定位
		log.error("业务异常", serviceException);
		return R.error(serviceException.getStatus(), serviceException.getMessage());
	}
}
遇到的问题

当你使用的是@ControllerAdvice 然而方法体上面没加@ResponseBody就会遇到一个奇怪的问题
异常处理类已经捕获该报错但是 http 响应 无论是 status 还是 body 都是 404 、 Not Found
暂时没研究出来什么原因换成@RestControllerAdvice、或者在方法上加上@ResponseBody就好了

在这里插入图片描述

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值