Java 如何在Spring引导中处理最大文件大小异常?

Java 如何在Spring引导中处理最大文件大小异常?,java,spring,spring-mvc,spring-boot,spring-restcontroller,Java,Spring,Spring Mvc,Spring Boot,Spring Restcontroller,我使用SpringBootV1.2.5创建REST应用程序。在上载图像时,我检查了最大文件大小,该文件大小由属性提供: multipart.maxFileSize= 128KB 在application.properties中。此功能由Spring Boot本身提供。现在检查正常了。问题是,我如何处理异常并向用户返回一条他能理解的消息 更新1---------- 我在控制器中编写了一个方法,打算在其中使用@ExceptionHandler处理MultipartException。它似乎不起作用

我使用SpringBootV1.2.5创建REST应用程序。在上载图像时,我检查了最大文件大小,该文件大小由属性提供:

multipart.maxFileSize= 128KB
在application.properties中。此功能由Spring Boot本身提供。现在检查正常了。问题是,我如何处理异常并向用户返回一条他能理解的消息

更新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
将允许我们返回
ResponseEntity
,而前者的方法将返回
ModelAndView
。不过我还没有试过

这是我用来处理多端口异常的最后一个代码:

@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开发/记录RESTAPI。这是上载超过大小的文件时的响应。 谢谢。

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

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


顺便说一句,我找到了这个。你可能想看看。

我试过了。我尝试使用ExceptionHandler在控制器中本地处理异常,而不是按照您共享的文档中的说明,使用ControllerAdvice进行全局包装。我正在尝试在方法中处理MultipartException。它似乎不起作用@卢博斯克纳克请检查更新1。我之前错了,并更正了我的答案。您想使用ErrorController。谢谢您指出。我已经用我正在使用的最终解决方案更新了我的帖子。@luboskrnac如果我使用@RestController怎么办?我不想返回页面-只是object@gstackoverflow好吧,这没什么区别。