Jackson JSON
ResponseEntity
类似于 @ResponseBody
,但包含状态码和头部信息。例如
-
Java
-
要求
@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
。请注意,应由 Resource
句柄延迟检索 InputStream
,以便在将其复制到响应后可靠地关闭它。如果您为此目的使用 InputStreamResource
,请确保使用按需的 InputStreamSource
(例如,通过一个获取实际 InputStream
的 lambda 表达式)构造它。此外,InputStreamResource
的自定义子类仅在结合自定义 contentLength()
实现时才受支持,后者避免为此目的消费流。
Spring MVC 支持使用单值响应式类型异步生成 ResponseEntity
,以及/或者使用单值和多值响应式类型作为响应体。这允许以下类型的异步响应:
-
ResponseEntity<Mono<T>>
或ResponseEntity<Flux<T>>
使响应状态和头部信息立即可知,而响应体在稍后以异步方式提供。如果响应体包含 0..1 个值,请使用Mono
;如果它可以生成多个值,请使用Flux
。 -
Mono<ResponseEntity<T>>
在稍后以异步方式提供所有三项——响应状态、头部信息和响应体。这使得响应状态和头部信息可以根据异步请求处理的结果而变化。