如何处理 Spring 引导中的最大文件大小异常?
How to handle maximum file size Exception in Spring Boot?
我正在使用 Spring Boot v1.2.5 创建 REST 应用程序。上传图片时,我检查了最大文件大小,提供了 属性 :
multipart.maxFileSize= 128KB
在 application.properties 中。此工具由 Spring Boot 本身提供。现在检查工作正常。问题是,我如何处理异常并 return 向用户发送他可以理解的消息?
更新 1------------
我在我的控制器中编写了一个方法,我打算在其中使用 @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
将允许我们 return 一个 ResponseEntity
,而不是前者,后者的方法将 return 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;
}
}
我正在为 developing/documenting REST Apis 使用 Swagger。这是上传超过大小的文件时的响应。
谢谢。
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
来处理它。
顺便说一句,我找到了这个 。你可能想看看。
我正在使用 Spring Boot v1.2.5 创建 REST 应用程序。上传图片时,我检查了最大文件大小,提供了 属性 :
multipart.maxFileSize= 128KB
在 application.properties 中。此工具由 Spring Boot 本身提供。现在检查工作正常。问题是,我如何处理异常并 return 向用户发送他可以理解的消息?
更新 1------------
我在我的控制器中编写了一个方法,我打算在其中使用 @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
将允许我们 return 一个 ResponseEntity
,而不是前者,后者的方法将 return 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;
}
}
我正在为 developing/documenting REST Apis 使用 Swagger。这是上传超过大小的文件时的响应。
You can also use regular Spring MVC features like
@ExceptionHandler
methods and@ControllerAdvice
. TheErrorController
will then pick up any unhandled exceptions.
由于 MultipartException
似乎发生在 @Controller/@ExceptionHandler/@ControllerAdvice
功能发挥作用之前,您应该使用 ErrorController
来处理它。
顺便说一句,我找到了这个