有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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”


共 (2) 个答案

  1. # 1 楼答案

    Swagger不会解析Java实现

    如果要在文档中添加更多信息,必须使用招摇注释:

    https://github.com/swagger-api/swagger-core/wiki/Annotations-1.5.X

    在你的情况下,比如:

    @ApiResponses(value = { 
          @ApiResponse(code = 500, message = "Maximum upload size exceeded.")
    })
    

    但您必须将此注释添加到RestController中。ControllerAdvice不是招摇过市的人

  2. # 2 楼答案

    我终于找到了原因。关键症状“!显示临时标题”通常意味着请求发送失败。但实际上,我在GlobalControllerExceptionHandler::MaxUploadSizeExceedeException上遇到了断点。因此,在我的例子中,对“!显示临时标题”的解释应该是,请求已发送,但由于MaxUploadSizeExceedeException(仅上载了部分数据),数据未完全发布。在浏览器上,如果请求帖子未完成,响应将被吞没。因此,大摇大摆的用户界面无法显示任何响应。 如果使用curl命令上传文件,我可以在输出中得到预期的响应