目录
一、报错Content type ‘multipart/form-data; boundary=…; charset=UTF-8’ not supported
报错原因
我在使用postman进行测试传参数时,用的是form-data,在form-data里输入参数的键值对。
而form-data和x-www-form-urlencoded不可以用@RequestBody,可以用@RequestParam。
补充知识
@PostMapping是一个组合注解,是@RequestMapping(method = RequestMethod.POST)的缩写。@RequestParam 和 @RequestBody 是用于处理HTTP请求的两个常用注解,它们分别用于处理查询参数和请求体中的数据。
在POST请求@PostMapping中,可以使用@RequestBody和@RequestParam。
@RequestParam
@RequestParam注解用来接收请求url后面的参数,或者Content-Type为multipart/form-data、application/x-www-form-urlencoded时的http body数据。
例如,如果你有一个URL为http://example.com/api/usersname=John,你可以使用@RequestParam来获取name参数的值。这通常用于获取简单的键值对数据。
@PostMapping("/users")
public String printHello(@RequestParam String name) {
return "Hello, " + name;
}
此时因为是使用@RequestParam封装的,所以当使用postman进行测试传参数时,需要用form-data传递参数。
@RequestBody
@RequestBody注解告诉Spring MVC将请求体(例如JSON或XML格式的数据)绑定到String类型的参数data上。这意味着方法可以直接操作请求体中的数据。
如果你要处理的是一个复杂的对象,或者你希望直接将请求体映射到一个Java对象上,你应该使用@RequestBody。
例如,如果你发送一个JSON格式的数据到服务器,可以创建一个对应的Java类,并使用@RequestBody来将JSON数据映射到这个类的对象上。这通常用于处理POST或PUT请求,其中请求体包含需要处理的数据。
@PostMapping("/users")
public String printUser(@RequestBody User user) {
return "User's name is " + user.getName();
}
class User {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
代码中的@RequestBody User user表示@RequestBody注解告诉Spring MVC将请求体(例如JSON格式的字符串)转换为User对象,并将其作为参数传递给registerUser方法。
此时因为是使用@RequestBody封装的,所以当使用postman进行测试传参数时,需要用raw,并选择json传递参数。
总的来说,@RequestParam注解用于获取简单的键值对数据,而@RequestBody注解用于将请求体映射到复杂的数据对象。
解决方法
将@RequestBody注解改为@RequestParam注解就可以了。