У меня есть простой нисходящий сервис для загрузки файлов. Пример кода
@RestController
@RequestMapping("/file")
public class FileController {
@PostMapping("/upload")
public ResponseEntity<?> uploadFile(@RequestParam("file") MultipartFile file,
@RequestParam(value = "delay", required = false, defaultValue = "0") int delay) throws Exception {
System.out.println(String.join(System.getProperty("line.separator"),
"File Name => " + file.getOriginalFilename(),
"File Size => " + file.getSize() + "bytes",
"File Content Type => " + file.getContentType()));
TimeUnit.MILLISECONDS.sleep(delay);
return ResponseEntity.ok(file.getName() + " uploaded");
}
}
и CustomExceptionHandler
, который возвращает BAD_REQUEST
, если есть MultipartException
:
@Configuration
@ControllerAdvice
public class CustomExceptionHandler {
@ExceptionHandler(MultipartException.class)
public ResponseEntity<String> handleMultipartException(MultipartException ex) {
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(ex.getMessage());
}
}
Предел размера составляет 10 МБ в application.yml:
spring:
servlet:
multipart:
max-file-size: 10MB
max-request-size: 10MB
Если я загружаю большой файл, он дает мне статус 400
, как и ожидалось
Когда я пытаюсь нажать то же самое с помощью Spring Cloud Gateway Я получаю следующий результат:
и в журналах показывается следующее:
2019-11-08 00:36:10.797 ERROR 21904 --- [ctor-http-nio-2] a.w.r.e.AbstractErrorWebExceptionHandler : [86e57f7e] 500 Server Error for HTTP POST "/product-service/file/upload"
reactor.netty.http.client.PrematureCloseException: Connection has been closed BEFORE response, while sending request body
Обратите внимание , что шлюз настроен на получение файла большого размера с глобально установленным фильтром RequestSize
, чтобы он занимал более 10 МБ.
Как я могу получить тот же код ответа, который заданнисходящий сервис?
Кроме того, я проверяю с традиционным Zuul, и я также получаю ошибку 500
.
Пример кода spring-cloud-gateway / product-service / eureka- https://github.com/dhananjay12/spring-cloud/tree/master/spring-routing