首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >RESTful应用程序的@ResponseStatus注释究竟是如何工作的?

RESTful应用程序的@ResponseStatus注释究竟是如何工作的?
EN

Stack Overflow用户
提问于 2015-02-08 08:18:36
回答 2查看 10.4K关注 0票数 8

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

我知道,对于REST,资源公开为名称,这些资源上的操作是HTTP方法,如GETPUTPOSTDELETE

我知道,请求是通过使用@RequestMapping注释来处理的,而不是处理资源上的操作的方法。

据我所知,标准web应用程序和RESTful应用程序都使用一些代码与它们的客户端通信( RESTful应用程序有一组扩展的代码),我认为这些代码表示请求的状态(例如,200是请求是一个成功的获取返回内容,等等)。

现在,文档显示了@ResponseStatus注释的使用情况,如本例所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@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,对吗?)

但是下面的注释究竟是做什么的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@ResponseStatus(HttpStatus.CREATED) // 201

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

看看我能读到的官方文件:

使用应返回的状态代码和原因标记方法或异常类。当调用处理程序方法或抛出所述异常时,状态代码将应用于HTTP响应。

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

  1. 资源是/orders URI。那么什么是创造的呢?一个名为orders的文件(我认为这个断言是错误的)还是什么?
  2. 201状态在哪里?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-08 08:22:22

201是HTTP状态码。它表明

请求已被满足,并导致创建了新的资源。

因此,如果您的服务器正在返回这样的状态代码,那么客户端就会了解创建了一些(概念上的)资源。那个资源是你的责任,你是服务器。

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

票数 4
EN

Stack Overflow用户

发布于 2022-11-14 01:00:00

实际上,用于JavaDocs注释的ResponseStatus警告我们不要将此注释用于REST。这个注释将导致Spring调用HttpServletResponse.sendError()方法,这将导致一个HTML页面。您不希望在RESTful服务中出现这种情况。上面写着:

警告:当在异常类上使用此注释时,或者在设置该注释的reason属性时,将使用HttpServletResponse.sendError方法。 对于HttpServletResponse.sendError,响应被认为是完整的,不应该再写入。此外,Servlet容器通常会编写HTML错误页,因此使用不适合REST的原因。对于这种情况,最好使用ResponseEntity作为返回类型,并完全避免使用@ResponseStatus

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28396263

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文