【发布时间】:2015-04-08 09:29:09
【问题描述】:
我正在学习 Spring Core 认证,我对 Spring 如何处理 REST 请求有一些疑问。
我知道,使用 REST,资源会以名称的形式公开,并且对这些资源的操作是 HTTP 方法,例如 GET、PUT、POST 和 删除。
而且我知道请求是通过在处理资源操作的方法上使用@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 上创建了新资源。
查看我可以阅读的官方文档:
用状态码和原因标记方法或异常类 应该退回。状态码应用于 HTTP 响应 调用处理程序方法时,或每当所述异常发生时 扔了。
那么它到底是什么意思呢?我认为就像在前面的示例中所做的那样,它设置了 201 状态,表示资源是由 POST 请求正确创建的。如果这是正确的,我有 2 个问题:
-
资源是 /orders URI。那么创造了什么?一个名为 orders 的文件(我认为这个断言是错误的)还是什么?
-
201状态放在哪里?
【问题讨论】:
-
我认为在学习Spring之前,你应该学习HTTP的基础知识。每个 HTTP 响应都有一个状态。 200 表示正常。 201 的意思是“你要求创造一些东西,而我做到了”。在这种情况下,如方法名称所示,已创建订单。
标签: java spring rest spring-mvc annotations