Мы используем Spring Boot 1.5.17.RELEASE. У нас есть несколько сервисов, и мы используем сервис zuul в качестве шлюза API и сервис eureka в качестве реестра сервисов.
Метод контроллера в службе лицензий:
@PutMapping(value = "/{licenseId}/upload")
public ResponseEntity<ValidationResponse> upload(@PathVariable Long licenseId,
@RequestParam("file") MultipartFile file) throws GenericException {
Когда я тестировал вышеуказанный метод API индивидуально (без шлюза API), я мог загружать файлы:
http://localhost:8061/licenses/7/upload
Но когда я тестировал API-шлюз, у меня было исключение:
http://localhost:8052/api/license-service/licenses/7/upload
Status is 400 Bad Request
ExceptionHandlerExceptionResolver - Resolved [org.springframework.web.multipart.support.MissingServletRequestPartException: Required request part 'file' is not present]
Почему он НЕ работает с Zuul API Gateway? Требуется дополнительная конфигурация?
@ Сид, я думаю, ты не полностью прочитал мой вопрос. Я могу протестировать файл загрузки (используя Postman), если я обращаюсь к API индивидуально, но с шлюзом Zuul API он не работает
Извините, если я это пропустил. Но исключение остается тем же, о том, что файл не найден. Возможно, вы пытаетесь опубликовать его из места, где нет файла.
@ Нет, это там. После успешного вызова "локальный: 8061 / лицензии / 7 / загрузка". Я просто изменил URL-адрес на «локальный: 8052 / API / лицензия-сервис / лицензии / 7 / загрузка». он дает 400, и на консоли я вижу это сообщение
Если это POST, вам также понадобится тело с составным файлом. Как вы это используете в обоих примерах?
Да, я использую в обоих запросах. В основном, когда мы используем Zuul Gateway, он перенаправляет на настроенную службу внутренне. К сожалению, он работает индивидуально, но не работает с Zuul.
В Spring Boot возникла проблема с запросами Multipart PUT. (Хотя это было исправлено, возможно, оно все еще работает некорректно с проксируемыми запросами ...) Итак, сначала проверьте, что произойдет, если вы измените аннотацию контроллера на @PostMapping.





В сообщении об исключении довольно четко указано, что
file, ожидаемый как часть запроса, отсутствует. Вы можете использовать что-то вроде Postman для отправки файлов в API и тестирования. Надеюсь это поможет.