У меня возникла проблема с контроллером, который я написал для загрузки фотографий на сервер.Многостраничный запрос spring не связывает данные файла
контроллер
@RequestMapping(value = "photos", method = RequestMethod.POST)
@ResponseBody
public Response uploadPhoto(@RequestPart PhotoMetaData data,
@RequestParam String localName,
@RequestPart(required = false) MultipartFile file,
HttpServletRequest request) {
log.info("@uploadPhoto > ip of request: " + request.getRemoteAddr() + ", metaData: " + data);
return photosService.storePhoto(data, file, localName);
}
проблема заключается в том, что file
равна нулю, но при проверке request
параметра запроса, очевидно, имеет 3 многокомпонентные Params, каждый из которых также это предполагается CONTENTTYPE но файл является длинная строка.
Android приложение называет этот код. Я использую OkHttp для создания многостраничного запроса. Код:
MediaType jsonMediaType = MediaType.parse("application/json");
RequestBody requestBody = new MultipartBuilder()
.type(MultipartBuilder.FORM)
.addPart(Headers.of("Content-Disposition", "form-data; name=\"data\""),
RequestBody.create(jsonMediaType, photoMetaDataStr))
.addPart(Headers.of("Content-Disposition", "form-data; name=\"localName\""),
RequestBody.create(MediaType.parse("text/plain"), localName.getPath()))
.addPart(Headers.of("Content-Disposition", "form-data; name=\"file\""),
RequestBody.create(MediaType.parse("image/jpeg"), new File(localName.getPath())))
.build();
Request request = new Request.Builder().url(url).post(requestBody).build();
final Response response = client.newCall(request)
.execute();
------ ИЗМЕНИТЬ ------------
соответствующие бобы:
@Bean
public MultipartResolver multipartResolver() {
return new CommonsMultipartResolver();
}
---- EDIT 2 - --- после изменения сигнатуры контроллера, чтобы файл был необходим, я получаю исключение:
---- EDIT 3 ------ После обширного тестирования я заметил, что проблема, вероятно, как я использую okHttp в чтобы отправить многостраничный запрос на сервер. используя Почтальон клиента, вызов был успешным
error with request org.springfra[email protected]3d854606
org.springframework.web.multipart.support
.MissingServletRequestPartException: Required request part 'file' is not present.
Спасибо за ваше время и помочь
Роя
Попробуйте '@ RequestPart' вместо' @ RequestParam' для параметра 'MultipartFile'. –
@ M.Deinum благодарит за ваш ответ. уже пробовал все возможные комбинации, включая изменение '@ RequestParam' на' @ RequestPart'. не работает – royB
Если он не работает, ваша конфигурация неверна. Тот факт, что все является строкой или строкой [], не является странным, так как это работает в Интернете, после этого параметры преобразуются. Однако это должно быть '@ RequestPart', а не' @ RequestParam', преобразование из 'String' в тип запроса обрабатывается совсем по-другому между ними. Удостоверьтесь, что вы компилируете с помощью отладочной информации else try '@RequestPart (value =" file "), required = false)' для отладки вы можете попробовать и сделать 'required' true (и посмотреть, какая ошибка выплевывается). –