Ответ, возвращаемый @ExceptionHandler для MaxUploadSizeExceededException в @ControllerAdvice, не может быть показан в swagger-ui.html.
Я использую Spring Boot для моего приложения RESTful. И использование Swagger-UI для использования API RESTful. Один из моих RESTful API - это загрузка файла с использованием Spring. MultipartFile.
Размер файла ограничен, и когда размер загружаемого файла превышает ограничение, возникает исключение, как показано ниже.
[Ошибка обработки запроса; вложенное исключение: org.springframework.web.multipart.MaxUploadSizeExceededException: превышен максимальный размер загрузки ...
Чтобы обработать это исключение и вернуть настроенное сообщение об ошибке клиенту, я использовал @ExceptionHandler в @ControllerAdvice для возврата ответа. Ниже мой код.
@ControllerAdvice
public class GlobalControllerExceptionHandler{
@ExceptionHandler(MaxUploadSizeExceededException.class)
@ResponseBody
public ResponseEntity<?> maxUploadSizeExceededException(MaxUploadSizeExceededException e) {
String bodyJson = "{\"ErrorMessage\":\"Maximum upload size exceeded.\"}";
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).contentType(MediaType.TEXT_PLAIN).body(bodyJson);
}
}
То, что я хочу увидеть в swagger-ui.html, выглядит так:
Response Body:
{"ErrorMessage":"Maximum upload size exceeded."}
Response Code:
500
Но сейчас я не увидел никакого контента:
Response Body:
no content
Response Code:
0
Один ненормальный симптом, который я увидел на консоли браузера, заключается в том, что заголовок запроса
Предварительные заголовки показывают «Предварительные заголовки показаны»:
!Provisional headers are shown
Accept: */*
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryf7WjEeoDHtIm3ly1
Origin: http://localhost:8080
Referer: http://localhost:8080/SpringApp/swagger-ui.html
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36
X-Requested-With: XMLHttpRequest
Я искал "Отображаются предварительные заголовки", кто-то объясняет, что, если такое сообщение отображается, это означает, что запрос фактически не отправлен. Но в моем случае я получил требование на стороне моего сервера приложений Spring, и я даже могу воспользоваться методом @ErrorHandler "maxUploadSizeExceededException".