10人参与 • 2026-01-31 • Java
springboot 接口获取参数的注解非常丰富,下面详细介绍一下常用的参数注解:
@pathvariable
获取 url 路径中的参数
// 获取单个参数
@getmapping("/user/{id}")
public user getuserbyid(@pathvariable long id) {
return userservice.findbyid(id);
}
// 获取多个参数
@getmapping("/user/{id}/post/{postid}")
public string getinfo(
@pathvariable long id,
@pathvariable long postid
) {
// ...
}
// 参数名不一致时指定
@getmapping("/user/{userid}")
public user getuser(@pathvariable("userid") long id) {
return userservice.findbyid(id);
}
// 获取所有路径变量(map形式)
@getmapping("/user/{id}/post/{postid}")
public string getinfo(@pathvariable map<string, string> pathvariables) {
return pathvariables.get("id");
}
// url路径中的时间参数
@getmapping("/events/date/{date}")
public list<event> geteventsbypathdate(
@pathvariable @datetimeformat(pattern = "yyyy-mm-dd") date date) {
return eventservice.findbydate(date);
}
@getmapping("/events/datetime/{datetime}")
public string getbydatetime(
@pathvariable @datetimeformat(pattern = "yyyy-mm-dd hh:mm:ss") localdatetime datetime) {
return "时间: " + datetime;
}
@requestparam
获取 url 查询字符串参数
// 必填参数
@getmapping("/users")
public list<user> getusers(@requestparam string name) {
return userservice.findbyname(name);
}
// 可选参数
@getmapping("/users")
public list<user> getusers(
@requestparam(required = false) string name,
@requestparam(defaultvalue = "1") int page,
@requestparam(defaultvalue = "10") int size
) {
return userservice.findbyname(name, page, size);
}
// 接收多个值
@getmapping("/users")
public list<user> getusers(@requestparam list<long> ids) {
return userservice.findbyids(ids);
}
// 获取所有查询参数(map形式)
@getmapping("/search")
public string search(@requestparam map<string, string> params) {
return params.get("keyword");
}
// 查询参数中的时间
@getmapping("/events")
public list<event> geteventsbydate(
@requestparam @datetimeformat(pattern = "yyyy-mm-dd") date date) {
return eventservice.findbydate(date);
}
// 多个时间参数
@getmapping("/events/range")
public list<event> geteventsbyrange(
@requestparam @datetimeformat(pattern = "yyyy-mm-dd") date startdate,
@requestparam @datetimeformat(iso = datetimeformat.iso.date_time) localdatetime endtime) {
return eventservice.findbydaterange(startdate, endtime);
}
@requestbody
获取 json/xml 格式的请求体
@postmapping("/user")
public user createuser(@requestbody user user) {
return userservice.save(user);
}
// 接收 map 类型的请求体
@postmapping("/data")
public string processdata(@requestbody map<string, object> data) {
return data.tostring();
}
// 使用 dto 接收参数
@postmapping("/register")
public responseentity<?> register(@requestbody registerdto registerdto) {
// 处理注册逻辑
return responseentity.ok("注册成功");
}
@modelattribute
获取表单数据(支持 get/post)
// 绑定到对象
@postmapping("/user")
public string createuser(@modelattribute user user) {
userservice.save(user);
return "success";
}
// 绑定到 map
@postmapping("/user")
public string createuser(@modelattribute map<string, object> model) {
return model.get("name").tostring();
}
@requestheader
获取 http 请求头信息
@getmapping("/info")
public string getinfo(
@requestheader("user-agent") string useragent,
@requestheader(value = "authorization", required = false) string auth,
@requestheader map<string, string> headers
) {
return "user-agent: " + useragent;
}
@cookievalue
获取 cookie 中的值
@getmapping("/profile")
public string getprofile(@cookievalue("sessionid") string sessionid) {
return "session id: " + sessionid;
}
// 可选参数
@getmapping("/profile")
public string getprofile(
@cookievalue(value = "sessionid", defaultvalue = "default") string sessionid
) {
return "session id: " + sessionid;
}
@requestpart
获取文件上传内容
@requestpart处理 multipart/form-data 请求中的复杂数据类型,支持文件上传和混合表单数据(如 json + 文件)。
| 特性 | @requestpart | @requestparam |
|---|---|---|
| 数据格式 | 支持任何内容类型(如 json、xml) | 仅支持 application/x-www-form-urlencoded |
| 内容类型 | 每个部分有独立的 content-type | 整个请求统一的 content-type |
| 数据处理 | 使用 httpmessageconverter | 使用 servlet api 的参数解析 |
| 文件处理 | 天然支持文件上传,支持其他类型 | 仅支持文件(作为 multipartfile) |
| json 绑定 | 直接绑定到对象 | 不支持 |
| 主要应用场景 | 上传文件同时发送 json 数据:如用户上传头像并附带用户信息(json)。 单个请求中混合不同类型的数据:如同时上传多个文件和表单数据。 rest api 中的文件上传:如上传图片并附带元数据(json)。 |
@restcontroller
@requestmapping("/api/upload")
public class uploadcontroller {
// 基础文件上传
@postmapping("/single")
public string uploadsingle(@requestpart("file") multipartfile file) {
return "uploaded: " + file.getoriginalfilename();
}
// 多文件上传
@postmapping("/multiple")
public string uploadmultiple(@requestpart("files") multipartfile[] files) {
return "uploaded " + files.length + " files";
}
// 文件 + json对象
@postmapping(value = "/upload", consumes = mediatype.multipart_form_data_value)
public string uploaddata(@requestpart("file") multipartfile file,
@requestpart("metadata") mymetadata metadata) {
// metadata 是自定义的 json 对象
return "uploaded file with metadata";
}
// 文件 + 表单字段
@postmapping(value = "/upload-with-data", consumes = mediatype.multipart_form_data_value)
public responseentity<?> uploadwithdata(
@requestpart("file") multipartfile file,
@requestparam("name") string name,
@requestparam("description") string description) {
// 处理文件和文本数据
return responseentity.ok("上传成功");
}
}
常见错误及解决方法:
与 @requestbody 的区别:
@requestparam
@postmapping("/upload-simple")
public string uploadsimple(@requestparam("file") multipartfile file) {
return "文件名称: " + file.getoriginalfilename();
}
@sessionattribute
获取会话属性
@getmapping("/dashboard")
public string dashboard(@sessionattribute("user") user user) {
return "欢迎 " + user.getusername();
}
@requestattribute
获取请求域属性
@getmapping("/process")
public string process(@requestattribute("processeddata") string data) {
return "处理后的数据: " + data;
}
@matrixvariable
获取矩阵变量(不常用)
// url: /cars;color=red;year=2023
@getmapping("/cars")
public string getcar(@matrixvariable string color) {
return color;
}
@value(从配置获取)
@getmapping("/config")
public string getconfig(@value("${app.name}") string appname) {
return "应用名称: " + appname;
}
到此这篇关于springboot接口获取参数的常用注解详解的文章就介绍到这了,更多相关springboot接口获取参数注解内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论