Пожалуйста, извините за любые ужасные ошибки, я буквально подобрал Kotlin полностью и немного весны около недели назад, из-за требования проекта.Я пытаюсь создать простой RESTful API с конечной точкой, которая может принимать файл через Multipart.Позже за пределами API появятся несколько страниц, которые будут отображать HTML, для этого я использую Koreander .Из того, что я вижу, и на основе учебных пособий по Java обработка исключений должна работать следующим образом.
Для API мой определенный обработчик исключений для MaxUploadSizeExceededException, однако, не срабатывает вообще.My application.kt:
@SpringBootApplication
@EnableConfigurationProperties(StorageProperties::class)
class JaApplication {
@Bean fun koreanderViewResolver(): ViewResolver = KoreanderViewResolver()
}
fun main(args: Array<String>) {
runApplication<JaApplication>(*args)
}
Мой контроллер:
@RestController
@RequestMapping("/api")
@EnableAutoConfiguration
class APIController {
@PostMapping(
value = "/convert",
produces = arrayOf(MediaType.APPLICATION_JSON_VALUE)
)
fun convert(@RequestParam("file") multipartFile: MultipartFile): Result {
return Result(status = 0, message = "You have uploaded: ${multipartFile.getOriginalFilename()}.")
}
}
@ControllerAdvice
class ExceptionHandlers {
@ExceptionHandler(MultipartException::class)
fun handleException(e: MultipartException): String = Result(status = 1, message = "File is too large.")
}
}
Когда я пытаюсь опубликовать большой файл с помощью curl, я получаю JSON-ответ:
curl -F 'file=@path-to-large-file' http://localhost:8080/api/convert
{"timestamp":"2018-11-27T15:47:31.907+0000","status":500,"error":"Internal Serve
r Error","message":"Maximum upload size exceeded; nested exception is java.lang.
IllegalStateException: org.apache.tomcat.util.http.fileupload.FileUploadBase$Siz
eLimitExceededException: the request was rejected because its size (4294967496)
exceeds the configured maximum (529530880)","path":"/api/convert"}
Возможно ли, что Tomcat не передаст это исключение в Spring?Если да, как я могу поймать это?Это также работает, если я могу установить неограниченный размер и проверить размер файла во время загрузки, хотя мне нужно было бы сделать это до того, как сервер начнет получать файл, и я предполагаю, что к тому времени, когда я доберусь до / api/ convert endpoint, уже слишком поздно.
Спасибо за любую помощь.