当前位置: 代码网 > it编程>游戏开发>ar > 关于@RequestBody,@PathVariable,无注解使用及说明

关于@RequestBody,@PathVariable,无注解使用及说明

2025年10月17日 ar 我要评论
参数注解使用场景完整指南1. @requestbody 使用场景核心特征:http方法:主要用于 post、put、patch数据来源:http请求体 (request body)content-ty

参数注解使用场景完整指南

1. @requestbody 使用场景

核心特征:

  • http方法:主要用于 post、put、patch
  • 数据来源:http请求体 (request body)
  • content-type:通常是 application/json

适用场景:

// 场景1:用户登录 - 敏感数据
@postmapping("/login")
public result<employeeloginvo> login(@requestbody employeelogindto employeelogindto) {
    // 原因:用户名密码敏感,需要在请求体中加密传输
}

// 场景2:新增员工 - 复杂对象
@postmapping
public result save(@requestbody employeedto employeedto) {
    // 原因:多个字段的复杂对象,json格式更清晰
}

// 场景3:修改员工信息 - 更新操作
@putmapping
public result update(@requestbody employeedto employeedto) {
    // 原因:修改操作通常用put,需要传递完整对象
}

// 场景4:批量操作
@postmapping("/batch")
public result batchsave(@requestbody list<employeedto> employees) {
    // 原因:批量数据,数组/列表格式
}

2. @pathvariable 使用场景

核心特征:

  • 数据来源:url路径中的变量部分
  • 用途:资源标识符,符合restful设计
  • http方法:get、put、delete等

适用场景:

// 场景1:根据id查询 - 资源标识
@getmapping("/{id}")
public result<employee> getbyid(@pathvariable long id) {
    // url: /admin/employee/123
    // 原因:id是资源的唯一标识符
}

// 场景2:根据id删除 - 资源操作
@deletemapping("/{id}")
public result delete(@pathvariable long id) {
    // url: /admin/employee/123
    // 原因:明确指定要删除的资源
}

// 场景3:状态切换 - 动作+资源
@postmapping("/status/{status}")
public result startorstop(@pathvariable integer status, long id) {
    // url: /admin/employee/status/1?id=123
    // 原因:status是操作类型,属于url路径的一部分
}

// 场景4:多级资源路径
@getmapping("/department/{deptid}/employees/{empid}")
public result getemployeeindept(@pathvariable long deptid, @pathvariable long empid) {
    // url: /admin/department/10/employees/123
    // 原因:表示部门下的特定员工资源
}

3. 无注解使用场景

核心特征:

  • 数据来源:url查询参数 (query parameters)
  • 用途:查询条件、过滤参数、分页参数
  • http方法:主要是get

适用场景:

// 场景1:分页查询 - 查询条件
@getmapping("/page")
public result<pageresult> page(employeepagequerydto employeepagequerydto) {
    // url: /admin/employee/page?name=张&page=1&pagesize=10
    // 原因:简单查询条件,支持缓存和书签
}

// 场景2:简单参数查询
@getmapping("/search")
public result<list<employee>> search(string keyword, integer status) {
    // url: /admin/employee/search?keyword=张三&status=1
    // 原因:简单的过滤条件
}

// 场景3:可选参数查询
@getmapping("/list")
public result<list<employee>> list(string department, integer level) {
    // url: /admin/employee/list?department=it&level=2
    // 原因:可选的查询条件,可以为空
}

详细对比表格

注解类型http方法数据位置使用场景url示例优缺点
@requestbodypost/put/patch请求体复杂对象、敏感数据、批量操作post /employee + json✅复杂数据 ❌不支持缓存
@pathvariableget/put/deleteurl路径资源标识符、层级资源get /employee/123✅restful ✅语义清晰
无注解geturl参数查询条件、分页、过滤get /employee?name=张&page=1✅支持缓存 ✅书签友好

实际项目中的应用示例

员工管理模块完整示例

@restcontroller
@requestmapping("/admin/employee")
public class employeecontroller {

    // 1. 登录 - @requestbody (敏感数据)
    @postmapping("/login")
    public result<employeeloginvo> login(@requestbody employeelogindto dto) {
        // post /admin/employee/login + json
    }

    // 2. 新增 - @requestbody (复杂对象)
    @postmapping
    public result save(@requestbody employeedto dto) {
        // post /admin/employee + json
    }

    // 3. 分页查询 - 无注解 (查询条件)
    @getmapping("/page")
    public result<pageresult> page(employeepagequerydto dto) {
        // get /admin/employee/page?name=张&page=1&pagesize=10
    }

    // 4. 根据id查询 - @pathvariable (资源标识)
    @getmapping("/{id}")
    public result<employee> getbyid(@pathvariable long id) {
        // get /admin/employee/123
    }

    // 5. 修改 - @requestbody (更新对象)
    @putmapping
    public result update(@requestbody employeedto dto) {
        // put /admin/employee + json
    }

    // 6. 启用禁用 - @pathvariable + 无注解 (状态+id)
    @postmapping("/status/{status}")
    public result startorstop(@pathvariable integer status, long id) {
        // post /admin/employee/status/1?id=123
    }

    // 7. 删除 - @pathvariable (资源标识)
    @deletemapping("/{id}")
    public result delete(@pathvariable long id) {
        // delete /admin/employee/123
    }
}

决策流程图

是否传输复杂对象或敏感数据?
├─ 是 → 使用 @requestbody (post/put + json)
└─ 否 → 是否资源标识符?
    ├─ 是 → 使用 @pathvariable (/{id})
    └─ 否 → 无注解 (url参数,get请求)

记忆口诀

  1. @requestbody = “量” (复杂对象、敏感数据、批量操作)
  2. @pathvariable = “” (id、路径参数、restful)
  3. 无注解 = “页” (查询条件、过滤器、分页参数)

特殊场景说明

混合使用场景

// 组合1:路径参数 + 查询参数
@getmapping("/department/{deptid}/employees")
public result getemployeesbydept(@pathvariable long deptid, 
                                string keyword, 
                                integer page) {
    // get /admin/department/10/employees?keyword=张&page=1
}

// 组合2:路径参数 + 请求体
@putmapping("/{id}")
public result update(@pathvariable long id, 
                    @requestbody employeedto dto) {
    // put /admin/employee/123 + json
    // id确定资源,dto包含更新数据
}

总结

这三种注解的选择遵循以下原则:

  1. @requestbody - 数据复杂度高、安全性要求高、修改操作
  2. @pathvariable - 资源定位、restful风格、层级关系
  3. 无注解 - 查询场景、性能优化、用户体验

选择正确的注解不仅能让代码更规范,还能提升api的性能和用户体验!

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com