spring boot 几种请求方式 form-data、x-www-form-urlencoded、json、raw

举报
林欣 发表于 2025/04/18 10:33:29 2025/04/18
【摘要】 在 Spring Boot 中,接收不同格式的请求数据需要使用不同的注解和方法。以下是处理 form-data、x-www-form-urlencoded、JSON 和 raw 数据的控制器写法: 1. 接收 form-data 或 x-www-form-urlencoded这两种格式都是表单提交,但 form-data 支持文件上传,而 x-www-form-urlencoded 是纯文本...

在 Spring Boot 中,接收不同格式的请求数据需要使用不同的注解和方法。以下是处理 form-datax-www-form-urlencoded、JSON 和 raw 数据的控制器写法:


1. 接收 form-datax-www-form-urlencoded

这两种格式都是表单提交,但 form-data 支持文件上传,而 x-www-form-urlencoded 是纯文本键值对。

示例代码:

import org.springframework.web.bind.annotation.*;

@RestController
public class FormController {

    // 处理 x-www-form-urlencoded
    @PostMapping("/form-urlencoded")
    public String handleFormUrlEncoded(
            @RequestParam("username") String username,
            @RequestParam("password") String password) {
        return "Received form-urlencoded: " + username + ", " + password;
    }

    // 处理 form-data(支持文件上传)
    @PostMapping("/form-data")
    public String handleFormData(
            @RequestParam("username") String username,
            @RequestParam("password") String password,
            @RequestParam("file") MultipartFile file) {
        // 处理文件(需要配置 MultipartResolver)
        return "Received form-data: " + username + ", " + password + ", File: " + file.getOriginalFilename();
    }
}

关键点:

  • 使用 @RequestParam 注解绑定表单字段。
  • 处理文件上传需要配置 MultipartResolver(在 application.properties 中添加 spring.servlet.multipart.enabled=true)。

2. 接收 JSON 数据

JSON 数据通常通过请求体传递,使用 @RequestBody 注解映射到 Java 对象。

示例代码:

import org.springframework.web.bind.annotation.*;

@RestController
public class JsonController {

    // 定义与 JSON 结构匹配的 Java 类
    static class User {
        private String username;
        private String password;
        // 必须有无参构造函数和 getter/setter
    }

    @PostMapping("/json")
    public String handleJson(@RequestBody User user) {
        return "Received JSON: " + user.getUsername() + ", " + user.getPassword();
    }
}

关键点:

  • 确保请求头中的 Content-Typeapplication/json
  • JSON 字段名必须与 Java 类的字段名匹配(或使用 @JsonProperty 注解)。

3. 接收 Raw 数据

Raw 数据可以是纯文本、XML、二进制等原始格式,使用 @RequestBody 注解配合字符串或字节数组。

示例代码:

import org.springframework.web.bind.annotation.*;

@RestController
public class RawController {

    // 接收纯文本
    @PostMapping("/raw-text")
    public String handleRawText(@RequestBody String text) {
        return "Received raw text: " + text;
    }

    // 接收二进制数据(如文件)
    @PostMapping("/raw-binary")
    public String handleRawBinary(@RequestBody byte[] data) {
        return "Received binary data of length: " + data.length;
    }
}

关键点:

  • 如果需要获取原始请求流,可以使用 HttpServletRequest
    @PostMapping("/raw-stream")
    public String handleRawStream(HttpServletRequest request) throws IOException {
        String body = StreamUtils.copyToString(request.getInputStream(), StandardCharsets.UTF_8);
        return "Received raw stream: " + body;
    }
    

总结

请求类型 注解/方法 适用场景
form-data @RequestParam 表单提交(含文件上传)
x-www-form-urlencoded @RequestParam 表单提交(纯文本键值对)
JSON @RequestBody + 对象 结构化数据(如 API 请求)
Raw @RequestBody + 字符串/字节数组 原始数据(如文本、二进制流)

确保在 application.properties 中配置必要的参数(如文件上传大小限制):

spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。