SpringBoot接口获取参数的常用注解详解

 更新时间:2026年01月31日 11:20:50   作者:一线大码  
SpringBoot 接口获取参数的注解非常丰富,这篇文章主要为大家详细介绍了一些常用参数注解的使用,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下

SpringBoot 接口获取参数的注解非常丰富,下面详细介绍一下常用的参数注解:

1、URL 路径参数

@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;
}

2. 查询参数(URL 参数)

@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);
}

3. 请求体参数

@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();
}

4. 请求头参数

@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;
}

5. Cookie 参数

@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;
}

6. 文件上传参数

@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("上传成功");
    }
}

常见错误及解决方法:

  • 忘记设置 consumes = "multipart/form-data"‌:导致无法解析请求。
  • 文件大小超过默认限制‌:需配置 spring.servlet.multipart.max-file-size 和 spring.servlet.multipart.max-request-size。

与 @RequestBody 的区别:

  • @RequestBody 用于处理 application/json 或 application/xml 格式的请求体数据。
  • @RequestPart 用于处理 multipart/form-data 中的复杂数据类型(如 JSON + 文件)。

@RequestParam

@PostMapping("/upload-simple")
public String uploadSimple(@RequestParam("file") MultipartFile file) {
    return "文件名称: " + file.getOriginalFilename();
}

7. 会话和属性参数

@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;
}

8. 其他特殊注解

@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接口获取参数注解内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • springcloud LogBack日志使用详解

    springcloud LogBack日志使用详解

    这篇文章主要介绍了springcloud LogBack日志使用,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • java实现电话本管理系统

    java实现电话本管理系统

    这篇文章主要为大家详细介绍了JAVA实现电话本管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02
  • jackson反序列化时如何忽略不需要的字段

    jackson反序列化时如何忽略不需要的字段

    这篇文章主要介绍了jackson反序列化时如何忽略不需要的字段,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • javaweb实现在线支付功能

    javaweb实现在线支付功能

    这篇文章主要为大家详细介绍了javaweb实现在线支付功能的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • Java实现读取键盘输入保存到txt文件,再统计并输出每个单词出现次数的方法

    Java实现读取键盘输入保存到txt文件,再统计并输出每个单词出现次数的方法

    这篇文章主要介绍了Java实现读取键盘输入保存到txt文件,再统计并输出每个单词出现次数的方法,涉及java文件I/O操作及字符串遍历、运算实现统计功能相关技巧,需要的朋友可以参考下
    2017-07-07
  • Java Lambda 表达式从入门到实战彻底搞懂函数式编程

    Java Lambda 表达式从入门到实战彻底搞懂函数式编程

    本文详细介绍了Java 8中的Lambda表达式,包括为什么需要Lambda、Lambda的核心概念、语法详解、实战场景、与匿名内部类的区别、优缺点以及应用建议,Lambda表达式简化了代码编写,提升了开发效率,是函数式编程的重要体现,感兴趣的朋友跟随小编一起看看吧
    2025-12-12
  • mybatis 报错显示sql中有两个limit的解决

    mybatis 报错显示sql中有两个limit的解决

    这篇文章主要介绍了mybatis 报错显示sql中有两个limit的解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • Java中String类(StringBuffer、StringBuilder)相关(最新推荐)

    Java中String类(StringBuffer、StringBuilder)相关(最新推荐)

    Java中的String类是不可变的,存储在字符串常量池中,提供了多种方法用于操作字符串,为了提高效率,可以使用StringBuilder或StringBuffer,本文介绍Java中String类(StringBuffer、StringBuilder)相关知识,感兴趣的朋友跟随小编一起看看吧
    2026-01-01
  • SpringBoot如何整合Springsecurity实现数据库登录及权限控制

    SpringBoot如何整合Springsecurity实现数据库登录及权限控制

    这篇文章主要给大家介绍了关于SpringBoot如何整合Springsecurity实现数据库登录及权限控制的相关资料,文中通过图文以及实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2022-01-01
  • java -jar启动参数设置file.encoding编码,解决中文乱码的问题

    java -jar启动参数设置file.encoding编码,解决中文乱码的问题

    这篇文章主要介绍了java -jar启动参数设置file.encoding编码,解决中文乱码的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07

最新评论