Springboot中Controller接收参数的方式

在Spring Boot中,@Controller@RestController可以通过多种方式接收客户端传递的参数,主要包括以下几种常见方式:


1. 接收路径参数(@PathVariable

从URL路径中提取参数,适用于RESTful风格的API。

示例

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

    // 示例URL: /user/123
    @GetMapping("/{id}")
    public String getUserById(@PathVariable Long id) {
        return "User ID: " + id;
    }

    // 多个路径变量
    @GetMapping("/{name}/{age}")
    public String getUserInfo(
            @PathVariable String name,
            @PathVariable int age) {
        return "Name: " + name + ", Age: " + age;
    }
}

2. 接收查询参数(@RequestParam

从URL的?key=value格式中获取参数,适用于GET请求。

示例

java 复制代码
@RestController
@RequestMapping("/search")
public class SearchController {

    // 示例URL: /search?keyword=spring
    @GetMapping
    public String search(@RequestParam String keyword) {
        return "Searching for: " + keyword;
    }

    // 可选参数(默认值)
    @GetMapping("/optional")
    public String searchOptional(
            @RequestParam(required = false, defaultValue = "default") String keyword) {
        return "Keyword: " + keyword;
    }

    // 接收多个参数
    @GetMapping("/multi")
    public String multiParams(
            @RequestParam String name,
            @RequestParam int age) {
        return "Name: " + name + ", Age: " + age;
    }
}

3. 接收表单数据(@ModelAttribute

适用于HTML表单提交(POST请求),自动绑定到Java对象。

示例

java 复制代码
@RestController
@RequestMapping("/form")
public class FormController {

    // 接收表单数据并绑定到User对象
    @PostMapping("/submit")
    public String submitForm(@ModelAttribute User user) {
        return "Submitted: " + user.getName() + ", " + user.getAge();
    }
}

// User.java
public class User {
    private String name;
    private int age;
    // getters & setters
}

4. 接收JSON请求体(@RequestBody

适用于POST/PUT请求,接收JSON格式数据并自动映射到Java对象。

示例

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

    // 接收JSON数据并映射到User对象
    @PostMapping("/create")
    public String createUser(@RequestBody User user) {
        return "Created: " + user.getName() + ", " + user.getAge();
    }
}

请求示例(POST /api/create

json 复制代码
{
    "name": "Alice",
    "age": 25
}

5. 接收HTTP请求头(@RequestHeader

获取HTTP请求头信息,如AuthorizationContent-Type等。

示例

java 复制代码
@RestController
@RequestMapping("/header")
public class HeaderController {

    @GetMapping("/info")
    public String getHeader(@RequestHeader("User-Agent") String userAgent) {
        return "User-Agent: " + userAgent;
    }
}

6. 接收Cookie(@CookieValue

获取客户端发送的Cookie值。

示例

java 复制代码
@RestController
@RequestMapping("/cookie")
public class CookieController {

    @GetMapping("/get")
    public String getCookie(@CookieValue("JSESSIONID") String sessionId) {
        return "Session ID: " + sessionId;
    }
}

7. 接收文件上传(MultipartFile

适用于文件上传(如<input type="file">)。

示例

java 复制代码
@RestController
@RequestMapping("/upload")
public class UploadController {

    @PostMapping("/file")
    public String uploadFile(@RequestParam("file") MultipartFile file) {
        return "File uploaded: " + file.getOriginalFilename() + ", Size: " + file.getSize();
    }
}

总结

方式 适用场景 注解 示例
路径参数 RESTful API(如/user/{id} @PathVariable /user/123id=123
查询参数 GET请求(?key=value @RequestParam /search?q=spring
表单数据 HTML表单提交(POST) @ModelAttribute <form>User对象
JSON请求体 POST/PUT请求(JSON数据) @RequestBody {"name": "Alice"}
HTTP请求头 获取请求头信息 @RequestHeader Authorization: Bearer xxx
Cookie 获取Cookie值 @CookieValue JSESSIONID=xxx
文件上传 文件上传(<input type="file"> MultipartFile 上传图片/文档

最佳实践

  • RESTful API :优先使用 @PathVariable + @RequestBody
  • 表单提交 :使用 @ModelAttribute@RequestParam
  • 文件上传 :使用 MultipartFile
  • 复杂参数 :使用 @RequestBody 接收JSON数据。

掌握这些方式后,可以灵活处理各种HTTP请求参数! 🚀

相关推荐
落笔画忧愁e4 分钟前
扣子Coze飞书多维表插件-列出全部数据表
java·服务器·飞书
鱼儿也有烦恼7 分钟前
Elasticsearch最新入门教程
java·elasticsearch·kibana
路修13 分钟前
Spring Boot + Elasticsearch + HBase 构建海量数据搜索系统
spring boot·elasticsearch·hbase
eternal__day17 分钟前
微服务架构下的服务注册与发现:Eureka 深度解析
java·spring cloud·微服务·eureka·架构·maven
一介草民丶23 分钟前
Jenkins | Linux环境部署Jenkins与部署java项目
java·linux·jenkins
武子康32 分钟前
Java-39 深入浅出 Spring - AOP切面增强 核心概念 通知类型 XML+注解方式 附代码
xml·java·大数据·开发语言·后端·spring
喜欢踢足球的老罗39 分钟前
使用 Spring Boot 3.3 和 JdbcTemplate 操作 MySQL 数据库
数据库·spring boot·mysql
米粉030542 分钟前
SpringBoot核心注解详解及3.0与2.0版本深度对比
java·spring boot·后端
一只帆記2 小时前
SpringBoot EhCache 缓存
spring boot·后端·缓存
ademen3 小时前
spring4第6课-bean之间的关系+bean的作用范围
java·spring