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 表达式)。

Spring MVC 支持使用单个值 响应类型来异步生成 ResponseEntity,和/或主体使用单个和多值响应类型。这允许以下类型的异步响应

  • ResponseEntity<Mono<T>>ResponseEntity<Flux<T>> 使响应状态和标头立即得知,而主体在稍后的时间点异步提供。如果主体包含 0..1 个值,则使用 Mono;如果它可以生成多个值,则使用 Flux

  • Mono<ResponseEntity<T>> 提供了所有三个——响应状态、标头和正文,稍后异步提供。这允许响应状态和标头根据异步请求处理的结果而有所不同。