Spring Request как MultipartFile с JSON и изображением, не преобразующим JSON в POJO - PullRequest
0 голосов
/ 28 июня 2018

Я пытаюсь отправить с jquery ajax в 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 голосов
/ 29 июня 2018

Мы не отправляем простые изображения в RestFul applications. Сначала мы кодируем их в base64, затем вы отправляете их на ваш бэкэнд. После этого используйте

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

для декодирования изображения.

Кроме того, не передавайте изображение в качестве параметра, используйте @RequestBody.

...