spring中 HTTP 请求常见格式

Spring MVC(或 Spring Boot)中,处理 HTTP 请求(如 POST、GET、DELETE、PUT 等)时,可以使用不同的注解来绑定请求中的数据到控制器方法的参数上。

java 复制代码
@RestController
@RequestMapping("/api/users")
public class UserController {

    // GET /api/users
    @GetMapping
    public List<User> getAllUsers() {
        // 返回所有用户
    }

    // GET /api/users/123
    @GetMapping("/{id}")
    public User getUserById(@PathVariable Long id) {
        // 根据 ID 查询
    }

    // POST /api/users
    @PostMapping
    public User createUser(@RequestBody User user) {
        // 保存新用户,返回带 ID 的对象
    }

    // PUT /api/users/123
    @PutMapping("/{id}")
    public User updateUser(@PathVariable Long id, @RequestBody User user) {
        // 全量更新用户
    }

    // PATCH /api/users/123
    @PatchMapping("/{id}")
    public User patchUser(@PathVariable Long id, @RequestBody Map<String, Object> updates) {
        // 部分更新(如只改 email)
    }

    // DELETE /api/users/123
    @DeleteMapping("/{id}")
    public ResponseEntity<Void> deleteUser(@PathVariable Long id) {
        // 删除用户
        return ResponseEntity.noContent().build(); // 204
    }

    // GET /api/users?username=alice
    @GetMapping(params = {"username"}) // 可选:限定必须带 username
    public List<User> searchByUsername(@RequestParam String username) {
        // 按用户名模糊查询
    }
}

方法参数不写注解默认是@RequestParam

特性 / 注解 @PathVariable @RequestParam @RequestBody
适用位置 方法参数 方法参数 方法参数
适用 HTTP 方法 所有(只要 URL 含路径变量) GET、POST、PUT、DELETE(任何带 query 或 form-data 的请求) POST、PUT、PATCH(通常不用于 GET/DELETE)
数据来源 URL 路径片段(如 /users/{id} URL 查询参数(?key=value)或表单字段(application/x-www-form-urlencodedmultipart/form-data HTTP 请求体(raw body),如 JSON、XML
支持基本类型 (如 String, Long, int ✅(但极少使用,易出错)
支持实体类(POJO) ✅(无需加注解,Spring 自动绑定) ✅(必须加注解,用于反序列化 JSON 等)
支持 Map<String, String> ✅(自动收集所有 query/form 参数) ✅(常用于接收结构未知的 JSON 对象,建议用 Map<String, Object> 更灵活)
多参数支持 每个路径变量需单独声明一个参数 ✅ 可多个 @RequestParam,或用 POJO / Map 一次性接收 ❌ 一个方法仅允许一个 @RequestBody
是否可省略注解 ❌ 必须显式标注 ⚠️ 基本类型可省略(默认视为 @RequestParam),但不推荐;POJO 不能加此注解 ❌ 必须显式标注,否则无法识别请求体
典型使用场景 RESTful 资源 ID:/users/123 搜索条件、分页、表单提交:?page=1&size=10 创建/更新资源:发送 JSON 对象 { "name": "Alice" }
相关推荐
就叫_这个吧12 分钟前
Java递归方法实现面包屑导航
java·开发语言
fīɡЙtīиɡ ℡27 分钟前
AI 应用系统设计
java·开发语言·人工智能
城管不管36 分钟前
重生——第十一次面试之挖财一面2026.8.19已OC
java·服务器·jvm·数据库·spring·面试·职场和发展
码匠许师傅36 分钟前
【C++ 面试真题】26. 聊聊 C++ 的智能指针
java·c++·面试
AI绘画哇哒哒1 小时前
【建议收藏!】35岁后端血泪忠告,这3类人别硬转Agent(过来人亲述)
java·人工智能·后端·ai·程序员·大模型·agent
最强小杰1 小时前
gpt-5.6-sol 频繁报 503 怎么办?区分容量熔断和限速 429 的排查方法 + 可复用 retry wrapper
java·人工智能·gpt·ai
吠品3 小时前
Wine 在 Linux 上运行 Windows 软件完整指南
java·linux·服务器
亚历克斯神5 小时前
智能搜索系统的升级复盘——从 Elasticsearch 到混合检索的检索质量提升
java·spring·微服务
金銀銅鐵5 小时前
[Java] 一个方法最多可以有多少个入参?
java·jvm
哭哭啼6 小时前
JAVA服务问题诊断
java·开发语言·jvm