3 回答
TA贡献1845条经验 获得超8个赞
不要那样做。
抛出你的异常,或者让它从你的调用堆栈中逃逸。使用@ControllerAdvice
(or @RestControllerAdvice
) with@ExceptionHandler
代替。
您可以扩展抽象类ResponseEntityExceptionHandler
,并提供额外的处理方法。从长远来看,这对于干净的应用程序设计很重要。
如果您打算返回带有状态码的错误200
,我想了解原因。我目睹了开发人员为错误请求提供响应,200
只是因为在客户端的另一个代码分支中处理 HTTP 错误似乎“困难”。
TA贡献1816条经验 获得超4个赞
一般在请求不成功时会返回错误信息,与 4/5xx 错误码一致。通常使用 Spring,您可以使用异常处理程序来管理这种情况,如此处所示,您可以在其中定义不同的响应主体。还有一个很好的做法:使用信封管理所有回复,我给你举个例子
{
status: 200,
message: 'user retrieved',
result:
[
{foo1:"bar1"},
.....
]
}
或者
{
status: 400,
message: 'bad request',
error:
{
reason : "wrong field xxx in request"
}
}
通过这种方式,客户端可以处理请求并向用户提供有用的信息。为此,您必须定义一个用于所有响应的类,并且应该封装结果或错误
TA贡献1853条经验 获得超9个赞
首先,您应该知道已经有一个类似的类 org.springframework.http.ResponseEntity,您可以返回该对象作为 API 的响应。它可以包装您的响应正文 - 列表、帐户、产品等,并有可能覆盖默认的 Http 状态。
因此,基于此示例,您可以编写自己的简单包装类,如下所示:
public class Response<T>
{
private GenericErrorClass error;
private T body;
// constructors + getters + setters
}
当您的 API 方法应该返回时,List<Customer>您将返回Response<List<Customer>>,以同样的方式返回其他对象。
但是,我建议您捕获异常并将详细的错误消息 + 相应的错误代码发送到 API 客户端。从设计的角度来看,这要好得多。在这里实现这一点是一个很好的阅读。
如果您有时间考虑 API 的设计,我会推荐本指南。
添加回答
举报