我正在学习 Spring Core 认证,我对 Spring 如何处理 REST 请求有一些疑问。
我知道,在 REST 中,资源以名称的形式公开,对这些资源的操作是 HTTP 方法,例如 GET、PUT、POST 和 DELETE。
我知道请求是通过在处理资源操作的方法上使用
@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 请求正确创建了资源。如果这是正确的,我有两个问题:
资源是 /orders URI。那么创建了什么?一个名为 orders 的文件(我认为这个断言是错误的)或者什么?
201状态放在哪里?
201 是HTTP 状态代码。这表明
请求已满足并导致创建新资源。
如果您的服务器返回这样的状态代码,则客户端了解已创建某些(概念)资源。该资源是什么是你的责任,你是服务器。
状态代码是 HTTP 响应状态行的一部分。