java - 如何在 Spring Boot 中处理最大文件大小异常?

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

我正在使用 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 Apis。这是上传超过大小的文件时的响应。 enter image description here 谢谢。

最佳答案

Spring Boot docs says :

You can also use regular Spring MVC features like @ExceptionHandler methods and @ControllerAdvice. The ErrorController will then pick up any unhandled exceptions.

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

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

关于java - 如何在 Spring Boot 中处理最大文件大小异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32867386/

相关文章:

java - servlet 映射 url 模式上的双通配符 (*) 是什么意思?

java - maven中没有main.java的包名

java - Windows 7 点阵打印机中的 jasper 打印字体不清晰

java - 正则表达式 - 需要帮助

java - Java 9 需要 Spring 5 吗?

java - Spring MVC 尝试从 GET 请求方法中的重定向获取参数

java - 将带逗号的内容写入CSV文件

java - 使用 JavaConfig 示例的 Spring Security Digest Auth

java - Spring MVC 域对象处理最佳实践

java - 如何在 Spring MVC 中使用内容类型 ModelAndView