--- title: Java 面试 Demo(Todo API) emoji: 🚀 colorFrom: blue colorTo: purple sdk: docker pinned: false --- # Java 面试 Demo(Todo API) 这是一个用于面试展示的 Java 小项目:基于 Spring Boot 实现一个最小可用的 Todo REST API,并包含参数校验、统一错误返回和基础测试。适配 HuggingFace Spaces(Docker)运行。 ## 功能点 - Todo CRUD:创建、查询列表、按 id 查询、更新、删除 - 参数校验:title 必填、长度限制等 - 统一错误返回:校验错误与 404 统一结构化返回 - 基础测试:MockMvc 覆盖创建与校验失败场景 - HuggingFace Spaces:Docker 方式部署,默认监听 7860 端口 ## 本地运行 前置: - JDK 21(推荐) 启动: ```bash export JAVA_HOME=$(/usr/libexec/java_home -v 21) ./mvnw test ./mvnw spring-boot:run ``` 访问: - 首页:http://localhost:7860/ - 健康检查:http://localhost:7860/api/health ## API 说明 ### 创建 Todo ```bash curl -s -X POST http://localhost:7860/api/todos \ -H 'Content-Type: application/json' \ -d '{"title":"准备面试","description":"把这个项目讲清楚"}' ``` ### 查询列表 ```bash curl -s http://localhost:7860/api/todos curl -s 'http://localhost:7860/api/todos?status=DONE' ``` ### 更新 Todo ```bash curl -s -X PUT http://localhost:7860/api/todos/1 \ -H 'Content-Type: application/json' \ -d '{"title":"准备面试","description":"更新一下状态","status":"DONE"}' ``` ### 删除 Todo ```bash curl -i -X DELETE http://localhost:7860/api/todos/1 ``` ## 设计要点(面试可讲) - 分层:Controller / Service 分离,Service 内存存储(ConcurrentHashMap) - 数据结构:使用 record 表达 DTO 与返回值 - 异常处理:全局异常处理,输出稳定的 ErrorResponse 结构 - 可部署性:读取 PORT 环境变量并监听 0.0.0.0,适配容器平台 ## 部署到 HuggingFace Spaces(Docker) 本仓库已经包含 Dockerfile。将代码推送到 Space 仓库后,Space 会自动构建并启动。