10

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

multipart.maxFileSize= 128KB

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

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

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

这是我的代码:

@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 指出之后,我设法想出了一个解决方案。我们可以使用ResponseEntityExceptionHandlerhere来处理这种特殊情况。我相信,我们也可以使用DefaultHandlerExceptionResolver,但ResponseEntityExceptionHandler允许我们返回 a 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。这是上传超过大小的文件时的响应。 在此处输入图像描述 谢谢。

4

1 回答 1

4

Spring Boot 文档说

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

就像MultipartException@Controller/@ExceptionHandler/@ControllerAdvice功能发挥作用之前发生的那样,您应该使用ErrorController它来处理它。

顺便说一句,我在此期间发现了这个线程。你可能想看看。

于 2015-10-01T14:44:36.693 回答