我们来详细讲解“深入了解SpringBoot中@ControllerAdvice的介绍及三种用法”的完整攻略。
介绍
@ControllerAdvice是Spring MVC提供的一个用于全局异常处理、数据绑定等工作的注解。使用@ControllerAdvice不仅能够处理所有控制器中抛出的异常,还能实现一些额外的公共处理逻辑,比如记录日志,返回统一格式的错误信息等。
三种用法
全局异常处理
在Spring Boot项目中,对于抛出的异常,如果没有进行有效的捕获处理,那么系统将直接返回500错误码,给用户体验带来一定的影响。为了避免这种情况的出现,我们可以使用@ControllerAdvice进行全局异常处理。
在控制器类上加上@ControllerAdvice注解之后,再加上@ExceptionHandler注解即可达到全局异常处理的效果。
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
@ResponseBody
public Map<String, Object> handleException(Exception e) {
Map<String, Object> result = new HashMap<>();
result.put("code", -1);
result.put("message", "error");
return result;
}
}
上面的示例中,@ExceptionHandler注解表示处理Exception类型的异常,@ResponseBody注解表示返回值需要是JSON格式。
全局数据绑定
在Spring MVC中,可以使用@InitBinder注解来定制数据绑定方式,比如日期的格式化要求等。如果有多个控制器需要进行数据绑定定制,那么就需要在每个控制器中都加上@InitBinder注解,这样代码会变得非常冗余。使用@ControllerAdvice可以将所有控制器的数据绑定合并到一个类中,从而提高代码的重用性。
@ControllerAdvice
public class GlobalBindingInitializer {
@InitBinder
public void initBinder(WebDataBinder binder) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
}
}
上面的示例中,@InitBinder注解表示定制数据绑定,这里使用了Spring自带的日期格式化工具类CustomDateEditor。
全局日志记录
最后一个用法是全局日志记录。在开发过程中,记录日志是非常必要的,可以帮助我们快速排查错误。使用@ControllerAdvice可以在所有的控制器中加入统一的日志记录逻辑,从而提高日志记录的效率。
@ControllerAdvice
public class GlobalLogHandler {
private static final Logger logger = LoggerFactory.getLogger(GlobalLogHandler.class);
@ModelAttribute
public void addAttributes(HttpServletRequest request) {
logger.info("Request URL: {}", request.getRequestURL());
}
}
上面的示例中,@ModelAttribute注解表示封装Controller方法的参数,addAttributes方法会拦截所有的请求并记录请求URL。
总结
本文详细介绍了@ControllerAdvice在SpringBoot中的介绍及三种用法,包括全局异常处理、全局数据绑定和全局日志记录。通过合理使用@ControllerAdvice,不仅能够提高代码的重用性,还能增强系统的可维护性和可读性。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:深入了解SpringBoot中@ControllerAdvice的介绍及三种用法 - Python技术站