java@ControllerAdvice中@ExceptionHandler返回的响应属性不能在swaggerui中显示。html
@ControllerAdvice中的@ExceptionHandler for MaxUploadSizeExceedeException返回的响应无法在Swigger ui中显示。html
我正在使用Spring Boot开发我的RESTful应用程序。以及使用swagger ui来使用RESTful API。我的RESTful API之一是upload file,使用Spring的MultipartFile
文件大小是有限的,当上传的文件大小超过限制时,会抛出如下异常。 [请求处理失败;嵌套异常为org.springframework.web.multipart.MaxUploadSizeExceedeException:超出最大上载大小
为了处理这个异常以向客户端返回定制的错误消息,我使用@ControllerAdvice中的@ExceptionHandler来返回响应。下面是我的代码
@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);
}
}
我想在大摇大摆的用户界面中看到什么。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方法“MaxUploadSizeExceedeException”
# 1 楼答案
Swagger不会解析Java实现
如果要在文档中添加更多信息,必须使用招摇注释:
https://github.com/swagger-api/swagger-core/wiki/Annotations-1.5.X
在你的情况下,比如:
但您必须将此注释添加到RestController中。ControllerAdvice不是招摇过市的人
# 2 楼答案
我终于找到了原因。关键症状“!显示临时标题”通常意味着请求发送失败。但实际上,我在GlobalControllerExceptionHandler::MaxUploadSizeExceedeException上遇到了断点。因此,在我的例子中,对“!显示临时标题”的解释应该是,请求已发送,但由于MaxUploadSizeExceedeException(仅上载了部分数据),数据未完全发布。在浏览器上,如果请求帖子未完成,响应将被吞没。因此,大摇大摆的用户界面无法显示任何响应。 如果使用curl命令上传文件,我可以在输出中得到预期的响应