【问题标题】:How to handle maximum file size Exception in Spring Boot?如何在 Spring Boot 中处理最大文件大小异常?
【发布时间】:2015-12-28 07:34:36
【问题描述】:

我正在使用 Spring Boot v1.2.5 来创建 REST 应用程序。在上传图片时,我检查了最大文件大小,这是提供的属性:

multipart.maxFileSize= 128KB

在 application.properties 中。此功能由 Spring Boot 本身提供。现在检查工作正常。问题是,我该如何处理异常,给用户返回一个他能理解的消息?

更新1---------

我在 Controller 中编写了一个方法,我打算在其中使用 @ExceptionHandler 处理 MultipartException。它似乎不起作用。

这是我的代码:

@ExceptionHandler(MultipartException.class)
@ResponseStatus(value = HttpStatus.PAYLOAD_TOO_LARGE)
public ApplicationErrorDto handleMultipartException(MultipartException exception){
    ApplicationErrorDto applicationErrorDto =  new ApplicationErrorDto();
    applicationErrorDto.setMessage("File size exceeded");
    LOGGER.error("File size exceeded",exception);
    return applicationErrorDto;
}

更新 2---------

在@luboskrnac 指出之后,我设法想出了一个解决方案。我们可以在这里使用ResponseEntityExceptionHandler 来处理这种特殊情况。我相信,我们也可以使用DefaultHandlerExceptionResolver,但ResponseEntityExceptionHandler 将允许我们返回ResponseEntity,而不是前者,其方法将返回ModelAndView。我没有尝试过。

这是我用来处理MultipartException 的最终代码:

@ControllerAdvice
public class CustomResponseEntityExceptionHandler extends ResponseEntityExceptionHandler {

private static final Logger LOGGER = Logger.getLogger(CustomResponseEntityExceptionHandler.class);

@ExceptionHandler(MultipartException.class)
@ResponseStatus(value = HttpStatus.PAYLOAD_TOO_LARGE)
@ResponseBody
public ApplicationErrorDto handleMultipartException(MultipartException exception){
    ApplicationErrorDto applicationErrorDto =  new ApplicationErrorDto();
    applicationErrorDto.setMessage("File size exceeded");
    LOGGER.error("File size exceeded",exception);
    return applicationErrorDto;
}
}

我正在使用 Swagger 开发/记录 REST API。这是上传超过大小的文件时的响应。 谢谢。

【问题讨论】:

    标签: java spring spring-mvc spring-boot spring-restcontroller


    【解决方案1】:

    Spring Boot docs says:

    您还可以使用常规 Spring MVC 功能,例如 @ExceptionHandler 方法和@ControllerAdvice。然后ErrorController 将接听 任何未处理的异常。

    由于MultipartException 似乎在@Controller/@ExceptionHandler/@ControllerAdvice 功能发挥作用之前发生,您应该使用ErrorController 来处理它。

    顺便说一句,我发现了这个thread in the meantime。你可能想看看。

    【讨论】:

    • 我试过这样做。按照您共享的文档中的说明,我尝试使用 ExceptionHandler 在我的控制器中本地处理异常,而不是使用 ControllerAdvice 的全局包装器。我正在尝试在方法中处理 MultipartException。它似乎不起作用。 @luboskrnac 请检查更新 1。
    • 我错了,之前并更正了我的答案。你想使用 ErrorController。
    • 感谢您指出。我已经用我正在使用的最终解决方案更新了我的帖子。
    • @luboskrnac 如果我使用@RestController 会怎样?我不想返回页面 - 只是对象
    • @gstackoverflow AFAIK,它不应该有所作为。
    猜你喜欢
    • 2019-07-24
    • 2019-03-15
    • 1970-01-01
    • 1970-01-01
    • 2018-07-26
    • 2023-03-28
    • 2020-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多