What is `ResponseEntity` does?

ResponseEntity 作为 Spring MVC controller层 的 HTTP 响应的类,包含状态码, headers, body (内容可以是任意类型的数据,包括字符串、对象、甚至是文件流)这三部分

返回集合数据:

java 复制代码
@RestController
@Slf4j
public class SearchController {
    @Autowired
    UserService userService;

    @RequestMapping(value = "/getAllStudents4", method = RequestMethod.GET)
    public ResponseEntity<List<Student>> getAllStudents4() {
        List<Student> students = userService.listStudents3(1, 5);

        HttpHeaders httpHeaders = new HttpHeaders();
        httpHeaders.add("test", "test");
        return ResponseEntity.ok().headers(httpHeaders).contentType(MediaType.APPLICATION_JSON).body(students);
    }
}


返回JSON数据:

java 复制代码
@RestController
public class MyController {

    @GetMapping("/users/{id}")
    public ResponseEntity<User> getUser(@PathVariable Long id) {
        User user = userService.getUserById(id); // 假设userService是获取用户的方法

        if (user == null) {
            return ResponseEntity.notFound().build();
        }

        return ResponseEntity.ok(user);
    }
}

自定义错误信息:

java 复制代码
@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(Exception.class)
    @ResponseBody
    public ResponseEntity<String> handleException(Exception ex) {
        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("An error occurred");
    }

    @ExceptionHandler(NotFoundException.class)
    public ResponseEntity<String> handleNotFoundException(NotFoundException ex) {
        return ResponseEntity.status(HttpStatus.NOT_FOUND).body("Resource not found");
    }
}

Further Reading : @ControllerAdvice

处理成功或失败时返回不同状态码的样例:

java 复制代码
@RestController
public class MyResourceController {

    @DeleteMapping("/resources/{id}")
    public ResponseEntity<Void> deleteResource(@PathVariable Long id) {
        try {
            resourceService.deleteResource(id); // 假设resourceService是资源删除服务
            return ResponseEntity.noContent().build(); // 成功删除时返回204 No Content
        } catch (ResourceNotFoundException e) {
            return ResponseEntity.notFound().build(); // 资源未找到时返回404 Not Found
        } catch (ResourceDeletionException e) {
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
                                 .body(new ErrorResponse("Error deleting resource", e.getMessage()));
        }
    }

    // 自定义错误响应类
    static class ErrorResponse {
        private String error;
        private String message;

        public ErrorResponse(String error, String message) {
            this.error = error;
            this.message = message;
        }

        // getters and setters...
    }
}

下载文件:

java 复制代码
@GetMapping("/download")
public ResponseEntity<Resource> downloadFile(@PathVariable String fileName) throws FileNotFoundException {
    Resource file = resourceLoader.getResource("classpath:files/" + fileName);

    HttpHeaders headers = new HttpHeaders();
    headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + fileName + "\"");

    return ResponseEntity.ok()
                         .headers(headers)
                         .contentLength(file.contentLength())
                         .contentType(MediaType.APPLICATION_OCTET_STREAM)
                         .body(file);
}

处理分页结果:

java 复制代码
@GetMapping("/users/page")
public ResponseEntity<Page<User>> getUsersByPage(Pageable pageable) {
    Page<User> usersPage = userService.getUsersByPage(pageable);
    
    if (usersPage.hasContent()) {
        return ResponseEntity.ok(usersPage);
    } else {
        return ResponseEntity.notFound().build();
    }
}
相关推荐
下辈子不要当码农15 分钟前
Day7-Linux软件编程(进程与线程(3))
java·开发语言
深入云栈26 分钟前
一文搞懂Netty 4.2六大核心概念:Channel/EventLoop/Selector/ByteBuf 如何关联
java·后端
hh95029 分钟前
Agent Plan × DeepSeek Harness:角色 Prompt 驱动的 Agent 分工优化与协作质量实验
java·前端·人工智能·prompt·adg·agent plan·adg成都社区
MetaLite32 分钟前
SpringBoot接口通用返回对象Resp设计
java·spring boot·后端
liangbo733 分钟前
JVM规范第 2章:从 class 文件到运行时数据区
java·jvm
吴声子夜歌43 分钟前
Java面试——Flink原理及应用(二)
java·面试·flink
深念Y1 小时前
数据库层设计的取舍:ORM 便利性与手写 SQL 的安全性权衡
java·数据库·sql·golang·框架·语言·ome
小江的记录本1 小时前
【ORM 框架】MyBatis-Plus 核心特性、条件构造器、分页插件、乐观锁插件(附《思维导图》、《问题排查与实践清单》和《面试高频考点汇总》)
java·windows·spring boot·python·spring·面试·mybatis
clorinda1 小时前
SQL 快速入门:题目单知识点精炼总结
java·数据库·sql
AI人工智能+电脑小能手1 小时前
大白话说Java设计模式-40-备忘录模式(业务实战篇)
java·设计模式·事务回滚·备忘录模式·状态保存·spring transactional·购物车快照