我正在尝试使用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数据(无图像)有效。
有什么想法吗?此时,我感觉好像缺少了一些愚蠢的小细节。
答案 0 :(得分:0)
我们不会在RestFul applications
中发送普通图像。我们先将它们编码为base64
,然后再将其发送到后端。然后,使用
byte[] image = Base64.getDecoder().decode(imagejson);
解码图像。
此外,请勿将图片作为参数传递,而应使用@RequestBody
。