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

相关推荐
大志说编程几秒前
LangChain框架入门16:智能客服系统RAG应用实战
后端·langchain·aigc
蔡俊锋4 分钟前
Javar如何用RabbitMQ订单超时处理
java·python·rabbitmq·ruby
沸腾_罗强15 分钟前
Redis内存爆了
后端
天天摸鱼的java工程师21 分钟前
Snowflake 雪花算法优缺点(Java老司机实战总结)
java·后端·面试
Miraitowa_cheems1 小时前
LeetCode算法日记 - Day 11: 寻找峰值、山脉数组的峰顶索引
java·算法·leetcode
海梨花1 小时前
【从零开始学习Redis】项目实战-黑马点评D2
java·数据库·redis·后端·缓存
共享家95271 小时前
linux-高级IO(上)
java·linux·服务器
bug菌1 小时前
零基础也能做出AI应用?Trae是如何打破编程"高墙"的?
后端·ai编程·trae
橘子郡1231 小时前
观察者模式和发布订阅模式对比,Java示例
java