Spring 编程常见错误 50 例
傅健
Cisco 高级软件工程师、Netty 源码贡献者
17065 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 29 讲
结束语 (1讲)
期末测试 (1讲)
Spring 编程常见错误 50 例
15
15
1.0x
00:00/00:00
登录|注册

16|Spring Exception 常见错误

你好,我是傅健。
今天,我们来学习 Spring 的异常处理机制。Spring 提供了一套健全的异常处理框架,以便我们在开发应用的时候对异常进行处理。但是,我们也会在使用的时候遇到一些麻烦,接下来我将通过两个典型的错误案例,带着你结合源码进行深入了解。

案例 1:小心过滤器异常

为了方便讲解,我们还是沿用之前在事务处理中用到的学生注册的案例,来讨论异常处理的问题:
@Controller
@Slf4j
public class StudentController {
public StudentController(){
System.out.println("construct");
}
@PostMapping("/regStudent/{name}")
@ResponseBody
public String saveUser(String name) throws Exception {
System.out.println("......用户注册成功");
return "success";
}
}
​为了保证安全,这里需要给请求加一个保护,通过验证 Token 的方式来验证请求的合法性。这个 Token 需要在每次发送请求的时候带在请求的 header 中,header 的 key 是 Token。
为了校验这个 Token,我们引入了一个 Filter 来处理这个校验工作,这里我使用了一个最简单的 Token:111111。
当 Token 校验失败时,就会抛出一个自定义的 NotAllowException,交由 Spring 处理:
@WebFilter
@Component
public class PermissionFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
String token = httpServletRequest.getHeader("token");
if (!"111111".equals(token)) {
System.out.println("throw NotAllowException");
throw new NotAllowException();
}
chain.doFilter(request, response);
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void destroy() {
}
NotAllowException 就是一个简单的 RuntimeException 的子类:
public class NotAllowException extends RuntimeException {
public NotAllowException() {
super();
}
}
同时,新增了一个 RestControllerAdvice 来处理这个异常,处理方式也很简单,就是返回一个 403 的 resultCode:
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了Spring异常处理机制,通过具体案例和技术分析,全面介绍了Spring框架中的异常处理原理和解决方案。首先介绍了一个关于过滤器异常处理的案例,引出了异常处理的问题。随后详细解析了Spring Web对异常统一处理的逻辑,包括ControllerAdvice的加载和异常处理器的初始化过程。最后,提出了问题修正方案,通过对Filter进行改造,手动捕获异常并交给HandlerExceptionResolver处理,最终解决了异常处理问题。 文章还深入分析了Spring Web中的异常处理机制,包括DispatcherServlet的核心处理代码和WebMvcConfigurationSupport的配置类。通过具体案例的介绍,读者可以更好地理解Spring MVC的异常处理机制,以及如何解决在实际生产环境中遇到的问题。 总的来说,本文通过深入的技术分析和案例讲解,为读者提供了对Spring异常处理机制的全面了解,对想深入了解Spring异常处理机制的读者具有很高的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Spring 编程常见错误 50 例》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(4)

  • 最新
  • 精选
  • 黑白颠倒
    学习这章之前需要先了解一下Spring处理异常的几种方式,这里推荐一篇文章。https://blog.csdn.net/qq_24598601/article/details/89243914?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_title~default-0.control&spm=1001.2101.3001.4242
    2021-08-26
    4
  • 黑白颠倒
    第一个没怎么看得懂。。。
    2021-08-26
    1
  • 阿波罗
    @ExceptionHandler(NoHandlerFoundException.class)这个按照老师的说明404不生效的直接原因找到了,因为服务的启动类加了@EnableAdminServer,去掉这个注解就可以了,加上就不好使了,
    2022-01-04
  • ifelse
    收货很多,原理,流程
    2021-11-08
收起评论
显示
设置
留言
4
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部