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)。

对于文件内容,可以通过复制已提供资源的 InputStream 内容到响应 OutputStream,来返回 ResponseEntity<Resource>。请注意,InputStream 应由 Resource 句柄以延迟方式检索,以便在复制到响应之后可靠地将其关闭。如果出于此目的使用 InputStreamResource,请务必使用按需 InputStreamSource 来构建它(例如,通过检索实际 InputStream 的 lambda 表达式)。此外,仅当结合使用自定义的 contentLength() 实现时才支持 InputStreamResource 的自定义子类,这种实现避免为此目的消耗流。

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

  • ResponseEntity&lt;Mono&lt;T&gt;&gt;`或 `ResponseEntity&lt;Flux&lt;T&gt;&gt;`使响应状态和标题在稍后的某个时刻以异步方式提供时立即为人所知。如果 body 由 0..1 值组成,则使用 `Mono;如果它可以产生多个值,则使用 Flux

  • `Mono&lt;ResponseEntity&lt;T&gt;&gt;`稍后以异步方式提供所有三个内容 — 响应状态、标题和 body。这允许响应状态和标题根据异步请求处理的结果而有所不同。