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

时间:2015-09-30 13:27:51

标签: 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 感谢。

1 个答案:

答案 0 :(得分:4)

Spring Boot docs says

  

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

MultipartException功能发挥作用之前,@Controller/@ExceptionHandler/@ControllerAdvice似乎很明显,您应该使用ErrorController来处理它。

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