ResponseEntity
ResponseEntity
类似于@ResponseBody
,但包含状态和头信息。例如
-
Java
-
Kotlin
@GetMapping("/something")
public ResponseEntity<String> handle() {
String body = ... ;
String etag = ... ;
return ResponseEntity.ok().eTag(etag).body(body);
}
@GetMapping("/something")
fun handle(): ResponseEntity<String> {
val body = ...
val etag = ...
return ResponseEntity.ok().eTag(etag).build(body)
}
主体通常作为值对象提供,由注册的HttpMessageConverters
之一将其呈现为相应的响应表示(例如,JSON)。
可以为文件内容返回ResponseEntity<Resource>
,并将提供的资源的InputStream
内容复制到响应OutputStream
。请注意,为了可靠地在将InputStream
内容复制到响应后关闭它,应通过Resource
句柄延迟检索InputStream
。如果为此目的使用InputStreamResource
,请确保使用按需InputStreamSource
构造它(例如,通过检索实际InputStream
的lambda表达式)。此外,自定义的InputStreamResource
子类仅与自定义的contentLength()
实现结合使用时才受支持,这避免了为此目的使用流。
Spring MVC支持使用单个值响应式类型异步生成ResponseEntity
,以及/或者使用单个和多值响应式类型作为主体。这允许以下类型的异步响应
-
ResponseEntity<Mono<T>>
或ResponseEntity<Flux<T>>
立即显示响应状态和头信息,而主体将在稍后异步提供。如果主体包含0..1个值,则使用Mono
;如果主体可能生成多个值,则使用Flux
。 -
Mono<ResponseEntity<T>>
异步地在稍后提供所有三个内容——响应状态、头信息和主体。这允许响应状态和头信息根据异步请求处理的结果而变化。