spring boot 几种请求方式 form-data、x-www-form-urlencoded、json、raw
【摘要】 在 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-data
、x-www-form-urlencoded
、JSON 和 raw
数据的控制器写法:
1. 接收 form-data
或 x-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-Type
为application/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)