FormPart
FormPart
和RequestParam和QueryParam一样只能用在方法参数上,用来获取客户端的请求参数,不同的是FormPart
仅用来获取 Form 中的参数。
大多数情况下,使用RequestParams
已经可以获取所有参数了,包括表单里面的参数,而FormPart
可以让一些复杂参数变得更简单。
FormPart
支持的参数类型有两种,一种是MultipartFile,另一种是 Model,比如User
、List<User>
和Map<String, User>
这样的参数。
例如客户端在表单的某个 Item 提交了一段 JSON、或者一个 JSON 文件,当我们使用RequestParam
获取到这段 JSON 以后,还需要把这段 JSON 转为 Model 对象,这样显得比较麻烦。如果使用了FormPart
就可以把这样的复杂参数转换为服务端的 Model 对象。
不过使用FormPart
需要开发者提供MessageConverter
来做转换,具体使用方法请参考Converter注解和MessageConverter类。
示例
@RestController
public class UserController {
@PostMapping("/user/update")
void updateUser(@FormPart("user") User user) {
...
}
@PostMapping("/user/children")
String upload(@FormPart("items") List<Child> children) throws IOException {
...
}
}
第一个 HTTP API 客户端应该在表单中添加一个key
为user
的参数,其value
的 JSON 就是User
转为 JSON 字符串后的结果。
{
"name": "AndServer",
"age": 18,
"gender": "male"
}
第二个 HTTP API 客户端应该在表单中添加一个key
为items
的参数,其value
的 JSON 结构应该是:
[
{
"name": "Child1",
"age": 18,
"gender": "male"
},
{
"name": "Child2",
"age": 18,
"gender": "female"
}
]
因为不同的
MessageConverter
实现可能是对 JSON 的转化、XML 的转化或者 Protobuf 的转化等,上述示例是以 JSON 为例,开发者应注意举一反三。
相关阅读推荐: