@ResponseStatus Spring注释对RESTful应用程序的确切工作原理是什么?

时间:2015-02-08 16:18:36

标签: java spring rest spring-mvc annotations

我正在攻读Spring Core认证,我对Spring如何处理 REST 请求有所怀疑。

我知道使用REST时,资源会显示为名称,并且这些资源的操作是HTTP方法: GET PUT POST 删除

我知道请求是通过对处理资源的方法使用 @RequestMapping 注释来处理的。

根据我的理解,标准Web应用程序和RESTful应用程序使用一些代码与其客户端通信(RESTful应用程序具有扩展的代码集),我认为这代表了请求的状态(例如 200 是请求是一个成功的GET返回内容,etcetc)。

现在在文档中显示使用 @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或PUT上创建 nNew资源

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

  

使用状态代码和原因标记方法或异常类   应该退还。状态代码应用于HTTP响应   调用处理程序方法时,或者何时调用异常   抛出。

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

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

  2. 推荐201状态?

1 个答案:

答案 0 :(得分:4)

201是HTTP status code。它表明

  

请求已经完成,导致创建了一个新资源。

因此,如果您的服务器返回此类状态代码,则客户端会理解已创建某些(概念性)资源。这是你的责任,你是服务器。

状态代码是HTTP response status line.

的一部分