Springboot中Controller接收参数的方式

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


1. 接收路径参数(@PathVariable

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

示例

@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请求。

示例

@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对象。

示例

@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对象。

示例

@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

{
    "name": "Alice",
    "age": 25
}

5. 接收HTTP请求头(@RequestHeader

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

示例

@RestController
@RequestMapping("/header")
public class HeaderController {

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

6. 接收Cookie(@CookieValue

获取客户端发送的Cookie值。

示例

@RestController
@RequestMapping("/cookie")
public class CookieController {

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

7. 接收文件上传(MultipartFile

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

示例

@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请求头获取请求头信息@RequestHeaderAuthorization: Bearer xxx
Cookie获取Cookie值@CookieValueJSESSIONID=xxx
文件上传文件上传(<input type="file">MultipartFile上传图片/文档

最佳实践

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值