RESTful 应用程序的 @ResponseStatus Spring 注释究竟是如何工作的?

How exactly works the @ResponseStatus Spring annotation for RESTful application?

我正在学习 Spring 核心认证,我对 Spring 如何处理 REST 请求有一些疑问。

我知道使用 REST 资源是作为名称公开的,并且对这些资源的操作是 HTTP 方法,例如 GETPUTPOSTDELETE.

而且我知道请求是通过在处理资源操作的方法上使用 @RequestMapping 注释来处理的。

据我了解,标准 Web 应用程序和 RESTful 应用程序都使用一些代码与他们的客户端通信(RESTful 应用程序有一组扩​​展的代码),我认为这些代码代表了请求的状态(例如 200 是请求是否成功 GET 返回内容等)。

现在文档显示了 @ResponseStatus 注释的用法,如本例所示:

@RequestMapping(value="/orders", method=RequestMethod.POST)
@ResponseStatus(HttpStatus.CREATED) // 201
public void createOrder(HttpServletRequest request, HttpServletResponse response) {
    Order order = createOrder(request);
    // determine full URI for newly created Order based on request
    response.addHeader("Location",
    getLocationForChildResource(request, order.getId()));
}

所以查看前面的方法我知道它处理 HttpRequest POST 对名为 /orders 的资源的请求(使用 REST,资源被视为 URL,对吗?)。

但是下面的注解到底做了什么:

@ResponseStatus(HttpStatus.CREATED) // 201

我知道 201 状态代码表示 新资源已在 POST.

查看官方文档我可以读到:

Marks a method or exception class with the status code and reason that should be returned. The status code is applied to the HTTP response when the handler method is invoked, or whenever said exception is thrown.

那么这到底是什么意思呢?我认为,正如在前面的示例中所做的那样,它设置了 201 状态,表示资源已由 POST 请求正确创建。如果这是正确的,我有 2 个问题:

  1. 资源是 /orders URI。那么创造了什么?一个名为 orders 的文件(我认为这个断言是错误的)或者什么?

  2. 201状态放在哪里?

201 是 HTTP status code。这表示

request has been fulfilled and resulted in a new resource being created.

因此,如果您的服务器返回这样的状态代码,那么客户端就会明白某些(概念上的)资源已创建。该资源是什么是您的责任,您是服务器。

状态代码是 HTTP response status line.

的一部分