@ResponseStatus Spring 注解对于 RESTful 应用程序到底如何工作?

问题描述 投票:0回答:1

我正在学习 Spring Core 认证,我对 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()));
}

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

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

@ResponseStatus(HttpStatus.CREATED) // 201

我知道 201 状态代码意味着在 POST 上创建了 新资源。

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

用状态代码和原因标记方法或异常类 应该被退回。状态代码应用于 HTTP 响应 当调用处理程序方法时,或者每当所述异常发生时 扔了。

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

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

  2. 201状态放在哪里?

java spring rest spring-mvc annotations
1个回答
4
投票

201 是HTTP 状态代码。这表明

请求已满足并导致创建新资源。

如果您的服务器返回这样的状态代码,则客户端了解已创建某些(概念)资源。该资源是什么是你的责任,你是服务器。

状态代码是 HTTP 响应状态行的一部分。

© www.soinside.com 2019 - 2024. All rights reserved.