ResponseEntity

ResponseEntity 类似于 @ResponseBody,但包含状态和响应头。例如:spring-doc.cadn.net.cn

@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)。spring-doc.cadn.net.cn

可以返回 ResponseEntity<Resource> 作为文件内容,将所提供资源的 InputStream 内容复制到响应 OutputStream 中。请注意,InputStream 应由 Resource 处理器按需检索,以便在将其复制到响应后能够可靠地关闭它。如果您为此目的使用 InputStreamResource,请确保使用按需 InputStreamSource 来构造它(例如,通过一个检索实际 InputStream 的 Lambda 表达式)。此外,InputStreamResource 的自定义子类仅在与自定义 contentLength() 实现结合使用时才受支持,该实现应避免为此目的消耗流。spring-doc.cadn.net.cn

Spring MVC 支持使用单值响应式类型来异步生成ResponseEntity,以及使用单值和多值响应式类型作为响应体。这使得可以实现以下类型的异步响应:spring-doc.cadn.net.cn

  • ResponseEntity<Mono<T>>ResponseEntity<Flux<T>> 可以立即确定响应状态和响应头,而响应体则在稍后异步提供。 如果响应体包含 0 到 1 个值,请使用 Mono;如果可能产生多个值,请使用 Fluxspring-doc.cadn.net.cn

  • Mono<ResponseEntity<T>> 可在稍后的异步时间点提供全部三项内容——响应状态、响应头和响应体。这使得响应状态和响应头可以根据异步请求处理的结果而变化。spring-doc.cadn.net.cn