美文网首页
异常设计及Spring的异常处理机制

异常设计及Spring的异常处理机制

作者: iyiyi | 来源:发表于2017-03-15 11:55 被阅读0次

异常不可避免,设计主要考虑以下原则

  • 程序错误导致异常:客户端无能为力
  • 客户端行为导致异常:如果能识别出来原因并通知客户端,否则客户端也无能为力
  • 请求资源失败导致异常:客户端可能可以补救,也许也无能为力如系统资源耗尽

基于上述分类,java里面的异常设计基本遵循以下两条原则

客户端无能为力 -- 封装成Unchecked
客户端可以调整 -- 封装成Checked

一些好的实践

  • Try not to create new custom exceptions if they do not have useful information for client code.

bad:

public class DuplicateUsernameException extends Exception {}

good:

public class DuplicateUsernameException extends Exception {
    public DuplicateUsernameException (String username){....}
    public String requestedUsername(){...}
    public String[] availableNames(){...}
}

or even:

throw new RuntimeException("Username already taken");
  • Never use exceptions for flow control

  • Generating stack traces is expensive and the value of a stack trace is in debugging. In a flow-control situation, the stack trace would be ignored, since the client just wants to know how to proceed.

Spring的异常处理

三种选择:以异常为基础;以控制器为基础;全局处理

任何没有被处理的异常会导致HTTP 500错误。

  • 以异常为基础
@ResponseStatus(value=HttpStatus.NOT_FOUND, reason="No such Order")  // 404
public class OrderNotFoundException extends RuntimeException {
    // ...**Bad practice according above principle**
}

这种异常不需要特殊处理,也不需要在最外层拦截,会直接导致一个指定HTTP状态的返回。

  • 以控制器为基础
    可以在Controller范围内对异常进行处理
    可以使用@ExceptionHandler,也可以使用@ExceptionHandler和@ResponseStatus相结合,可以定制HTTP返回(既可以是View--使用ModelAndView,也可以是String,也可以没有返回)

HttpServletRequest, HttpServletResponse, HttpSession and/or Principle都可以出现在handler的参数列表里。

  • 全局处理
    @ControllerAdvice
    每一个处理方法都需要使用@ExceptionHandler

相关文章

  • 异常设计及Spring的异常处理机制

    异常不可避免,设计主要考虑以下原则 程序错误导致异常:客户端无能为力 客户端行为导致异常:如果能识别出来原因并通知...

  • java 异常

    Java中异常处理是识别及响应错误的机制。有效地异常处理能使程序更加健壮。异常处理是非功能性需求。 异常的处理机制...

  • 异常处理 ?处理(try-catch) :甩锅(throws)_

    本章概要 本章主要和大家一起学习java异常类的处理机制,深入学习java异常类。掌握异常处理机制,及背后的逻辑。...

  • Java异常简介及其架构

    Java异常简介 Java异常是Java提供的一种识别及响应错误的一致性机制。Java异常机制可以使程序中异常处理...

  • 异常处理

    JAVA严格的异常处理机制和类型检查机制 异常处理手贱异常非手贱异常 异常链处理 异常是在程序出错的时候能知道程序...

  • Java异常处理机制

    什么是异常处理机制: 异常处理机制: 让程序发生异常时,按照代码预先设定的异常处理逻辑,针对性地处理异常,让程序尽...

  • Exception 和 Error 有什么区别

    为什么会有异常处理机制 Java 语言在设计之初提供了相对完善的异常处理机制,这种机制大大降低了编写和维护可靠的程...

  • spring boot异常处理

    spring boot异常处理 在spring mvc异常处理一文中,我介绍了在spring mvc中如何配置异常...

  • Spring 之异常处理

    spring的异常处理 spring的异常处理,有两种方式 1、实现HandlerExceptionResolve...

  • 解析

    SpringBoot异常处理机制 再看源码之前总结阐述下原理,Spring通过@ControllerAdvice和...

网友评论

      本文标题:异常设计及Spring的异常处理机制

      本文链接:https://www.haomeiwen.com/subject/mnrlnttx.html