Spring请求作为带有JSON和图像的MultipartFile不将JSON转换为POJO

时间:2018-06-28 19:22:42

标签: jquery json spring-mvc multipartform-data spring-annotations

我正在尝试使用jquery ajax POST到Spring Rest Controller的图像和对象数据。
此方法的原始实现仅发布了已转换为我的对象的json数据。我现在正尝试将图像与json一起发布。图像数据在我的控制器方法中绑定了图像。 json数据未转换。

@RequestMapping(value = "/buildKit", method = RequestMethod.POST)
@ResponseBody
public KitView buildKit(@RequestParam(value = "kitData", required = true)
KitTagIventoryDataList inventoryData, @RequestParam(value = "image", required = false)
MultipartFile image, @ModelAttribute(COMMAND_NAME)  KitTagCommand command) {

导致错误:

Caused by: java.lang.IllegalStateException: Cannot convert value of type [org.springframework.web.multipart.commons.CommonsMultipartFile] to required type [com.blah.blah.webapp.spring3mvc.controller.KitTagIventoryDataList]: no matching editors or conversion strategy found

更改方法签名以使用@RequestPart代替@RequestParam来处理请求的json / object部分 不会导致任何错误,但是KitTagInventoryDataList对象包含所有属性的空值。

使用jquery ajax发布的请求有效负载:

    -----------------------------22184201846440
Content-Disposition: form-data; name="kitData"; filename="blob"
Content-Type: application/json; charset=utf-8

{"serialId":"E20020839511008814907AB5","note":"box of notes","data":[{"id":"39212","qty":"0"},{"id":"39215","qty":"0"}]}
-----------------------------22184201846440
Content-Disposition: form-data; name="image"; filename="blob"
Content-Type: image/png

PNG

就像我说的那样,映射到@RequstBody并仅发布json / object数据(无图像)有效。

有什么想法吗?此时,我感觉好像缺少了一些愚蠢的小细节。

1 个答案:

答案 0 :(得分:0)

我们不会在RestFul applications中发送普通图像。我们先将它们编码为base64,然后再将其发送到后端。然后,使用

byte[] image = Base64.getDecoder().decode(imagejson);

解码图像。

此外,请勿将图片作为参数传递,而应使用@RequestBody