ResponseEntity

ResponseEntity 类似于 @ResponseBody,但带有状态和头。例如:

  • Java

@GetMapping("/something")
public ResponseEntity<String> handle() {
  String body = ... ;
  String etag = ... ;
  return ResponseEntity.ok().eTag(etag).body(body);
}

正文通常作为值对象提供,由已注册的 HttpMessageConverters 之一渲染为相应的响应表示(例如 JSON)。

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

Web MVC 支持使用单个值 响应式类型 异步生成 ResponseEntity,和/或正文的单值和多值响应式类型。这允许以下类型的异步响应:

  • ResponseEntity<Mono<T>>ResponseEntity<Flux<T>> 使响应状态和头立即可知,而正文在稍后异步提供。 如果正文包含 0..1 个值,请使用 Mono;如果它可以生成多个值,请使用 Flux

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