网络接口返回类ResponseEntity

发布于:2025-05-07 ⋅ 阅读:(14) ⋅ 点赞:(0)

简介

使用的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);
    }


网站公告

今日签到

点亮在社区的每一天
去签到