我正在学习Spring认证,对于Spring如何处理REST请求有一些疑问。
我知道,对于REST,资源公开为名称,这些资源上的操作是HTTP方法,如GET、PUT、POST和DELETE。
我知道,请求是通过使用@RequestMapping
注释来处理的,而不是处理资源上的操作的方法。
据我所知,标准web应用程序和RESTful应用程序都使用一些代码与它们的客户端通信( RESTful应用程序有一组扩展的代码),我认为这些代码表示请求的状态(例如,200是请求是一个成功的获取返回内容,等等)。
现在,文档显示了@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请求正确地创建了资源。如果这是正确的,我有两个问题:
发布于 2015-02-08 08:22:22
201是HTTP状态码。它表明
请求已被满足,并导致创建了新的资源。
因此,如果您的服务器正在返回这样的状态代码,那么客户端就会了解创建了一些(概念上的)资源。那个资源是你的责任,你是服务器。
状态代码是HTTP响应状态行。的一部分。
发布于 2022-11-14 01:00:00
实际上,用于JavaDocs注释的ResponseStatus警告我们不要将此注释用于REST。这个注释将导致Spring调用HttpServletResponse.sendError()
方法,这将导致一个HTML页面。您不希望在RESTful服务中出现这种情况。上面写着:
警告:当在异常类上使用此注释时,或者在设置该注释的
reason
属性时,将使用HttpServletResponse.sendError
方法。 对于HttpServletResponse.sendError
,响应被认为是完整的,不应该再写入。此外,Servlet容器通常会编写HTML错误页,因此使用不适合REST的原因。对于这种情况,最好使用ResponseEntity
作为返回类型,并完全避免使用@ResponseStatus
。
https://stackoverflow.com/questions/28396263
复制相似问题