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>> 在稍后异步提供所有三项内容——响应状态、头信息和响应体。这允许响应状态和头信息根据异步请求处理的结果而变化。

© . This site is unofficial and not affiliated with VMware.