网络接口返回类ResponseEntity
- 简介
- 方法
- 获取工厂方法
- ResponseEntity.ok()返回BodyBuilder
- 返回文字信息
- 返回类对象(Spring自动转换为json格式)
- 返回空内容
- ResponseEntity.notFound()返回HeadersBuilder
- 返回文字信息
- status(HttpStatus)返回BodyBuilder
- noContent()返回HeadersBuilder
- 设置响应头信息中的指定属性和值
- headers(headers)
- body(resource)
- 使用示例
简介
使用的org.springframework.http.ResponseEntity;,是 Spring Framework 提供的、一个Spring中的通用类。它用于构建 HTTP 响应的方式、返回一个 HTTP 状态码为 200 OK 的响应,并且可以附带返回的数据。
待补入此博客。
方法
ResponseEntity 用于表示整个 HTTP 响应,包括:
- 状态码 (HTTP status code)
- 头部信息 (HTTP headers)
- 响应体 (HTTP body)
方法返回值的类型ResponseEntity<中的类型>取决于接口返回值body(中的类型),因为public abstract <T> ResponseEntity<T> body( @Nullable T body )。
获取工厂方法
ResponseEntity.ok()返回BodyBuilder
ResponseEntity.ok() 是一个静态工厂方法、用于返回一个 ResponseEntity. BodyBuilder来生成具体的请求成功返回信息,使用该 ResponseEntity. BodyBuilder生成的都是状态码为 200 OK、请求成功的响应。
返回文字信息
return ResponseEntity.ok("Operation successful.");
该接口响应的返回信息,如下图所示。

返回类对象(Spring自动转换为json格式)
如果返回的对象是User类,Spring会自动将其转换为JSON格式(前提是项目中有Jackson或类似的库支持)。
return ResponseEntity.ok(new FileRecord("filename","path",new Date()));
请求该接口收到的返回信息,如下图所示。

返回空内容
返回一个HTTP 200响应,但没有响应体。
//因为ResponseEntity.ok()返回的是 ResponseEntity.BodyBuilder,所以相当于BodyBuilder.build();
return ResponseEntity.ok().build();
请求该接口收到的返回信息(为空、下图的1为postman的行数标记而非接口返回信息),如下图所示。

ResponseEntity.notFound()返回HeadersBuilder
ResponseEntity.notFound() 自认也是一个静态工厂方法、用于返回一个 ResponseEntity. HeadersBuilder<?>来生成具体的404 notFound返回信息,使用该 ResponseEntity. BodyBuilder生成的都是状态码为 404 notFound、请求资源未找到“Requested resource could not be found. 的响应。
返回文字信息
return ResponseEntity.notFound().build();
该接口响应的返回信息,如下图所示。

status(HttpStatus)返回BodyBuilder
ResponseEntity.status(HttpStatus) 自认也是一个静态工厂方法、用于返回一个ResponseEntity. BodyBuilder来生成具体的HttpStatus类返回信息,使用该 ResponseEntity. BodyBuilder生成的都是状态码为指定HttpStatus的响应。
本例中,返回类型ResponseEntity<中的类型>取决于接口返回值body(中的类型),因为public abstract <T> ResponseEntity<T> body( @Nullable T body )
public ResponseEntity<String> downloadFile(@PathVariable String filename) {
// 返回 404 和错误消息
return ResponseEntity.status(HttpStatus.NOT_FOUND).body("User not found.");
该接口响应的返回信息,如下图所示。

noContent()返回HeadersBuilder
ResponseEntity.noContent() 自认也是一个静态工厂方法、用于返回一个ResponseEntity. HeadersBuilder来通过status(HttpStatus.NO_CONTENT)生成类返回信息,使用该 ResponseEntity. HeadersBuilder生成的都是状态码为HTTP 204 No Content的响应。
本例中,返回类型ResponseEntity<中的类型>取决于接口返回值body(中的类型),因为public abstract <T> ResponseEntity<T> body( @Nullable T body )
return ResponseEntity.noContent().build();

设置响应头信息中的指定属性和值
比如设置content-type使用HttpHeaders.CONTENT_TYPE:
return ResponseEntity.ok().header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE).build();
请求该接口收到的返回信息,下图红框中的内容是上面设置的响应头信息,如下图所示。

如果修改上述代码
return ResponseEntity.ok().header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_GRAPHQL_VALUE).build();
请求该接口收到的返回信息,此时下图响应头信息发生了变化,如下图红框所示。

headers(headers)
由…调用,返回``。自定义响应头 如果需要自定义响应头,可以链式调用 header() 方法:
HttpHeaders headers = new HttpHeaders();
//下载文件所需
headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + encodedFileName + "\"");
//
return ResponseEntity.ok().headers(headers).body(resource);
body(resource)
由ResponseEntity. BodyBuilder调用,返回 ResponseEntity<T>
HttpHeaders headers = new HttpHeaders();
FileSystemResource resource = new FileSystemResource(file);
return ResponseEntity.ok().headers(headers).body(resource);
使用示例
@GetMapping("/download/{filename:.+}")public ResponseEntity<FileSystemResource> downloadFile(@PathVariable String filename) {// 假设文件存储在项目的files目录下File file = new File("files/" + filename);if (!file.exists()) {return ResponseEntity.status(HttpStatus.NOT_FOUND).build();}FileSystemResource resource = new FileSystemResource(file);HttpHeaders headers = new HttpHeaders();headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + file.getName());return ResponseEntity.ok().headers(headers).body(resource);}