如何处理Spring Boot中的最大文件大小exception?

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

multipart.maxFileSize= 128KB 

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

更新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。 这是上传超过大小的文件时的响应。 在此处输入图像描述 谢谢。

Spring Boot文档说 :

您还可以使用常规的Spring MVCfunction,如@ExceptionHandler方法和@ControllerAdvice 。 然后ErrorController将获取任何未处理的exception。

由于在@Controller @Controller/@ExceptionHandler/@ControllerAdvicefunction发挥作用之前, MultipartException似乎很明显,你应该使用ErrorController来处理它。

顺便说一下,我在此期间找到了这个post 。 你可能想看看。