FormPart

FormPartRequestParamQueryParam一样只能用在方法参数上,用来获取客户端的请求参数,不同的是FormPart仅用来获取 Form 中的参数。

大多数情况下,使用RequestParams已经可以获取所有参数了,包括表单里面的参数,而FormPart可以让一些复杂参数变得更简单。

FormPart支持的参数类型有两种,一种是MultipartFile,另一种是 Model,比如UserList<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 客户端应该在表单中添加一个keyuser的参数,其value的 JSON 就是User转为 JSON 字符串后的结果。

{
  "name": "AndServer",
  "age": 18,
  "gender": "male"
}

第二个 HTTP API 客户端应该在表单中添加一个keyitems的参数,其value的 JSON 结构应该是:

[
  {
    "name": "Child1",
    "age": 18,
    "gender": "male"
  },
  {
    "name": "Child2",
    "age": 18,
    "gender": "female"
  }
]

因为不同的MessageConverter实现可能是对 JSON 的转化、XML 的转化或者 Protobuf 的转化等,上述示例是以 JSON 为例,开发者应注意举一反三。


相关阅读推荐:

  1. RequestParam
  2. QueryParam

results matching ""

    No results matching ""