gpt4 book ai didi

java - RESTful 应用程序的 @ResponseStatus Spring 批注究竟如何工作?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:30:03 29 4
gpt4 key购买 nike

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

我知道在 REST 中,资源作为名称公开,并且对这些资源的操作是 HTTP 方法,例如 GETPUTPOST 删除

而且我知道请求是通过在处理资源操作的方法上使用 @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 thatshould be returned. The status code is applied to the HTTP responsewhen the handler method is invoked, or whenever said exception isthrown.

那么这到底是什么意思呢?我认为,正如在前面的示例中所做的那样,它设置了 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. 的一部分

关于java - RESTful 应用程序的 @ResponseStatus Spring 批注究竟如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28396263/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com