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
句柄
延迟检索,以便在复制到响应后可靠地关闭它。如果您将 InputStreamResource
用于此目的,请确保使用按需 InputStreamSource
(例如,通过检索实际 InputStream
的 lambda 表达式)来构造它。此外,InputStreamResource
的自定义
子类仅在与自定义 contentLength()
实现结合使用时才受支持,该实现避免为此目的消耗流。
Spring MVC 支持使用单个值 响应式类型
异步生成 ResponseEntity
,以及/或用于主体的单值和多值响应式类型。这允许以下类型的异步响应:
-
ResponseEntity<Mono<T>>
或ResponseEntity<Flux<T>>
使响应状态和 头部信息立即可知,而主体在稍后异步提供。如果主体包含 0..1 个值,则使用Mono
;如果可以生成多个值,则使用Flux
。 -
Mono<ResponseEntity<T>>
在稍后异步提供所有三者——响应状态、头部信息和主体。 这允许响应状态和头部信息根据异步请求处理的结果而变化。