当前位置: 首页 > 知识库问答 >
问题:

Springboot rest API和响应状态通用实践

施彬彬
2023-03-14

首先,我不知道是否应该将找不到资源视为“例外事件”,或者只是应用程序应该经常处理的事情。

我发现的大多数解决方案都建议使用带注释的异常,该异常告诉处理程序在未找到资源的情况下返回404。

例如:

@ResponseStatus(value = HttpStatus.NOT_FOUND, reason = "Resource not found")
public class ResourceNotFoundException extends RuntimeException {
    public ResourceNotFoundException() {
        super();
    }

    public ResourceNotFoundException(String message, Throwable cause) {
        super(message, cause);
    }

    public ResourceNotFoundException(String message) {
        super(message);
    }

    public ResourceNotFoundException(Throwable cause) {
        super(cause);
    }
}
    null

我该把它扔哪儿?在存储库级别?还是只返回null并在控制器级别抛出异常?这样会更有效率还是只是一种糟糕的做法?

共有1个答案

卫松
2023-03-14

返回错误的方式与API紧密耦合,而服务代码应该与API无关。换句话说,如果由于某种原因需要在REST API旁边添加SOAP API,那么服务代码应该能够为这两个API提供服务。因此,任何与API紧密耦合的东西都应该在实现API的层中处理,在本例中是您的控制器层。

在我当前的工作地点,我们检查控制器中是否存在正在操作的资源。由于我们使用Hibernate,一旦从数据库检索到实体,它就会在会话的持续时间内保留在会话缓存中,并且如果您选择不将实体下传给服务,则不会在服务层中第二次检索时产生额外的成本。

在SpringBoot中,org.springFramework.data.rest.WebMVC.ResourceNotFoundException被绑定到404 not_found。因此,您不需要为API实现任何类型的异常处理程序来返回带有404 http状态代码的响应。

 类似资料:
  • 我使用curl获取http头以查找http状态代码并返回响应。我使用以下命令获取http头

  • 我想知道在REST API中应该如何响应。 有效示例: 以上是一个有效的请求,当前我的HTTP状态为200,有一个JSON响应

  • 在改版1.9中,RetrofitError仍然存在,我们可以通过以下操作获得状态: 您如何使用RXJava在Registfit2.0中做到这一点?

  • 问题内容: 我有一个API调用,我需要对其进行一些检查并可能返回各种状态代码。我不需要自定义视图或任何东西,我只需要返回正确的代码。如果用户未通过适当的凭据,则需要返回401状态。如果他们尚未发送受支持的请求格式,则需要返回400状态。 因为它是一个API,所以我真正想做的就是设置响应状态并以一条简单的愚蠢消息退出,该消息说明请求失败的原因(可能使用)。刚好足以完成工作,但我还无法使其正常工作。我

  • 我用的是和Gradle的协议。是否可以从状态更改URL捕获响应?例如,我正在向数据库中添加一条新记录。提供程序创建一个唯一的id,该id必须用于该记录的其他操作。

  • HTTP响应消息的响应状态行分为三部分:HTTP版本、状态码和状态信息,如下所示: HTTP/1.1 200 OK 其中HTTP版本可以是HTTP/1.1或HTTP/1.0,这由Web服务器所支持的HTTP版本决定。状态信息的内容和状态相关,如404状态码所对应的HTTP1.1规范中的状态信息是Not Found。由于HTTP版本一般是基本固定的,而状态信息是随着状态码的变化而变的。因此,在HTT