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请求参数! 🚀

相关推荐
凯子坚持 c1 分钟前
C++ 连接 Redis:redis-plus-plus 安装与使用入门指南
java·c++·redis
没有bug.的程序员8 分钟前
Redis vs Memcached vs MongoDB:深入对比与选型指南
java·redis·mongodb·memcached
易元9 分钟前
模式组合应用-装饰器模式
后端·设计模式
半桔9 分钟前
【Linux手册】管道通信:从内核底层原理到使用方法
java·linux·服务器·网络·c++
BeyondCode程序员10 分钟前
苹果内购 V1 与 V2 支付流程对比(附示例java代码)
java·后端
叫我阿柒啊11 分钟前
从全栈工程师视角解析Java与前端技术在电商场景中的应用
java· 消息队列· spring boot· 微服务· vue3· 安全· 前端框架
华仔啊11 分钟前
Redis 不只是缓存!Java 打工人必知的 10 个真实工作场景,第 5 个太香了
java·后端
程序边界14 分钟前
Oracle到金仓数据库信创改造迁移实施规划方案(上篇)
后端
|CXHAO|27 分钟前
使用tomcat本地部署draw.io
java·tomcat·draw.io
韦德说32 分钟前
我的副业之 - 三年磨一剑,让非技术人员也能实现建站自由
后端·程序员·开源