springboot常用的请求参数的接收方式详解

在Spring Boot中,接收请求参数的方式有多种,主要有以下几种方式:

1. 使用 @RequestParam 注解

@RequestParam 用于接收请求中的查询参数(query parameters)。它通常用于处理 URL 中的键值对,如 ?key=value

  • 示例:接收查询参数

    @GetMapping("/example")
    public String example(@RequestParam String name, @RequestParam int age) {
        return "Name: " + name + ", Age: " + age;
    }
    

    在这个例子中,如果 URL 是 /example?name=John&age=30nameage 的值会被传递给方法。

  • 参数类型转换:Spring 会自动进行参数类型的转换。如果类型不匹配(例如将字符串转为整数失败),会抛出异常。

  • 默认值:可以设置默认值,当请求中没有对应参数时会使用默认值。

    @GetMapping("/example")
    public String example(@RequestParam(defaultValue = "John") String name) {
        return "Name: " + name;
    }
    

2. 使用 @PathVariable 注解

@PathVariable 用于接收路径中的参数,通常用于 RESTful 风格的 URL。

  • 示例:接收 URL 中的路径参数
    @GetMapping("/user/{id}")
    public String getUser(@PathVariable String id) {
        return "User ID: " + id;
    }
    
    例如,当请求路径为 /user/123 时,id 参数会接收到 123

3. 使用 @RequestBody 注解

@RequestBody 用于接收请求体中的数据,通常用于 POST 请求或 PUT 请求。它可以将请求体的数据反序列化成指定的 Java 对象(如 JSON、XML 等)。

  • 示例:接收 JSON 格式的请求体
    @PostMapping("/createUser")
    public String createUser(@RequestBody User user) {
        return "User created: " + user.getName();
    }
    
    假设发送的请求体是:
    {
        "name": "John",
        "age": 30
    }
    
    @RequestBody 会将请求体的 JSON 数据转换为 User 对象。

4. 使用 @ModelAttribute 注解

@ModelAttribute 用于将请求参数绑定到方法参数的 JavaBean 中。它常用于表单提交或使用 GET 请求传递的数据。

  • 示例:表单数据绑定到 Java 对象

    @PostMapping("/submitForm")
    public String submitForm(@ModelAttribute User user) {
        return "Form submitted by: " + user.getName();
    }
    

    假设 HTML 表单提交的数据为:

    <form action="/submitForm" method="post">
        <input type="text" name="name" />
        <input type="number" name="age" />
    </form>
    
  • 注意@ModelAttribute 会将请求中的所有参数与 Java 对象的字段进行匹配。

5. 使用 @RequestHeader 注解

@RequestHeader 用于获取请求头中的数据。可以通过此注解获取 HTTP 请求头的某些信息。

  • 示例:接收请求头
    @GetMapping("/header")
    public String getHeader(@RequestHeader("User-Agent") String userAgent) {
        return "User-Agent: " + userAgent;
    }
    
    假设请求头中包含 User-Agent 字段,@RequestHeader 会将其值传递给 userAgent 变量。

6. 使用 @CookieValue 注解

@CookieValue 用于获取请求中的 cookie 值。

  • 示例:接收请求中的 cookie
    @GetMapping("/cookie")
    public String getCookie(@CookieValue("JSESSIONID") String sessionId) {
        return "Session ID: " + sessionId;
    }
    
    假设请求中包含名为 JSESSIONID 的 cookie,@CookieValue 会将其值传递给 sessionId

7. 使用 @RequestParam 的集合类型

@RequestParam 也支持接收数组或集合类型的参数。

  • 示例:接收多个相同名称的参数
    @GetMapping("/items")
    public String getItems(@RequestParam List<String> items) {
        return "Items: " + items;
    }
    
    例如请求 /items?items=apple&items=banana&items=cherryitems 将接收到 ["apple", "banana", "cherry"]

8. 使用 @RequestPart 注解

@RequestPart 用于处理上传的文件或多部分表单数据(multipart/form-data)。它用于从请求中提取文件或其他部分的数据。

  • 示例:接收文件和其他表单字段
    @PostMapping("/upload")
    public String uploadFile(@RequestPart("file") MultipartFile file, @RequestPart("description") String description) {
        return "File uploaded: " + file.getOriginalFilename() + ", Description: " + description;
    }
    
    这里,file 是通过 @RequestPart 注解接收的文件,而 description 是接收到的其他字段。

9. 使用 @RequestMapping 注解的 params 属性

可以在 @RequestMapping 中使用 params 属性来限制方法仅在满足特定查询参数时才会被调用。

  • 示例:请求必须包含特定参数才能执行
    @RequestMapping(value = "/search", params = "query")
    public String search(@RequestParam String query) {
        return "Search query: " + query;
    }
    
    只有当请求路径为 /search?query=value 时,才会匹配到这个方法。

总结:

  • @RequestParam:用于查询参数。
  • @PathVariable:用于路径参数。
  • @RequestBody:用于请求体,常用于接收 JSON、XML 等格式的数据。
  • @ModelAttribute:用于将请求参数绑定到 JavaBean 中。
  • @RequestHeader:用于接收请求头数据。
  • @CookieValue:用于接收 Cookie 值。
  • @RequestPart:用于处理上传的文件和表单字段。
  • 集合类型的 @RequestParam:用于接收多个相同名称的参数。
  • @RequestMapping params 属性:用于限制特定查询参数的接收。

这些方式可以根据不同的需求选择使用,灵活地处理 Spring Boot 中的请求参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

唐骁虎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值