赞
踩
目录
继承 ResponseStatusException-自定义异常类
继承 ResponseStatusException-自定义响应头信息
继承 ResponseStatusException-定制更多异常处理逻辑
继承 ResponseStatusException-根据异常发生的上下文动态改变 HTTP 状态码
ResponseStatusException
可以在代码中的任何地方抛出特定的 HTTP 状态码(比如 404 NOT FOUND 或 400 BAD REQUEST)以及一个可选的错误消息RuntimeException
,因而它是一个不受检异常(unchecked exception),你不需要在方法签名上声明它,也不必强制捕获它ResponseStatusException
类的主构造函数如下:status
:一个 HttpStatus
枚举值,表示要返回的 HTTP 状态码reason
:一个表示错误详情的 String
;这个消息可能会返回给客户端,所以在设置时要注意安全性和敏感信息泄露的问题cause
:引发异常的原始 Throwable
对象;这不会直接发送给客户端,通常用于日志记录目的reason
)或(cause
),您可以根据实际需求使用它们ResponseStatusException
:ResponseStatusException
,并且返回状态码 404 NOT FOUND
以及错误信息 “Item not found”ResponseStatusException
是RuntimeException
的子类,Spring 框架会捕捉到这个异常,并将其转换成相应的 HTTP 响应返回给客户端ResponseStatusException
是一个构建好的异常类,它可以被直接使用来返回特定的 HTTP 状态代码和消息ResponseStatusException
ResponseStatusException
的自定义异常类:CustomBadRequestException
被抛出时,Spring 框架会捕捉到这个异常,并且根据异常内的信息返回一个 HttpStatus.BAD_REQUEST
(400 错误码) 的 HTTP 响应给客户端,并带有 “这里是错误信息” 作为响应体中的错误描述ResponseStatusException
的自定义异常类中重写 getResponseHeaders()
方法可以让你添加或者定制返回给客户端的 HTTP 响应头ResponseStatusException
没有响应头或者只有基本的响应头getResponseHeaders()
方法来添加一个自定义的响应头:CustomBadRequestException
将会导致 Spring 框架处理这个异常,并在最终的 HTTP 响应中包含 ‘X-Custom-Error’ 这个头信息ResponseStatusException
的自定义异常类中,除了getResponseHeaders()
之外,你可能会考虑重写几个其他重要的方法来进一步定制你的异常处理逻辑:getStatus()
方法getCause()
方法提供原始的异常;这对于调试和错误跟踪是非常有用的getMessage()
方法来提供更丰富的信息,并重写 printStackTrace()
和 getStackTrace()
方法来添加关于库存不足的特定上下文信息在这个示例中:
getMessage()
被重写以返回一个更为详细的错误信息printStackTrace()
被重写以打印特定的业务相关错误信息getStackTrace()
被重写以添加自定义的堆栈跟踪元素,这可能对调试有帮助,显示出是在检查库存时出现了问题getStatus()
被重写以返回一个特定的HTTP状态;请注意,通常这也可以通过在抛出异常时传递不同的 HttpStatus
枚举值给构造函数来实现getMessage()
被修改以增加更多的业务信息,如最后库存同步时间通过这样重写这些方法,我们可以提供更加具体的错误状态和信息,以便在记录日志、返回给客户端、调试等方面提供有用的上下文
503 Service Unavailable
,如果是产品完全下架则使用 410 Gone
)chooseHttpStatus
方法基于 productDiscontinued
布尔变量的值来选择不同的HTTP状态码410 Gone
状态码;如果仅仅是暂时的库存问题,则使用 503 Service Unavailable
productDiscontinued
决定了异常应该携带的HTTP状态码Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。