|
对于最新的稳定版本,请使用 Spring Framework 7.0.6! |
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 来构造它(例如,通过一个 lambda 表达式来获取实际的 InputStream)。此外,自定义的 InputStreamResource 子类仅在与自定义的 contentLength() 实现结合使用时才受支持,该实现应避免为此目的消耗流。
Spring MVC 支持使用单个值 响应式类型
以异步方式生成 ResponseEntity,以及用于正文的单值和多值响应式
类型。这允许以下类型的异步响应:
-
ResponseEntity<Mono<T>>或ResponseEntity<Flux<T>>会立即使响应状态和头信息可知,而正文会在稍后异步提供。 如果正文包含 0..1 个值,请使用Mono,如果它能生成多个值,请使用Flux。 -
Mono<ResponseEntity<T>>提供了所有三个要素——响应状态、标头和正文,并在稍后异步提供。这允许根据异步请求处理的结果来改变响应状态和标头。