将一部分编组到一个对象中

如果要将零件的内容转换为域对象(例如 UserAccountAddress),则过程非常简单:

可以上传多个部分,每个部分都有不同的名称。对于每个零件名称,你将需要一个用 @RequestPart 注释的参数,其名称与零件名称相匹配。

要接收通过 HTTP Post 上传的文件,你需要执行以下操作:

@RequestMapping(
    value = "...",
    method = RequestMethod.POST,
    consumes = MediaType.MULTIPART_FORM_DATA_VALUE
)
public Object uploadFile(
    @RequestPart Address address,
) {
    .
    .
    .
}

作为原始 HTTP 请求:

POST /... HTTP/1.1
Host: ...
Content-Type: multipart/form-data; boundary=----------287032381131322

------------287032381131322
Content-Disposition: form-data; name="address"; filename="address.json"
Content-Type: application/json

{"houseNumber": "10/A", "streetName": "Dumbldore Road", "town": "Hogsmede"}
------------287032381131322--

最重要的是:

  • 部件的名称必须与变量的名称匹配。
  • 如果你将其作为常规请求发送,则该部件的 Content-Type 必须是 Spring 能够处理的部件。也就是说,如果你可以使用 Content-Type 执行 POSTfoo/bar,并且 Spring 能够将其转换为对象,那么它也可以将一个部件编组到一个对象中。
  • 必须能够设置零件的 Content-Type。如果你不能,这种方法将无法工作 - Spring 不会尝试猜测该部分的 Content-Type