通知用户上传了大文件



我有一个通过Spring Boot实现的REST API。我需要提供multipart/form-data请求(一个JSON和一个图像列表(,我通过这个简单的控制器方法来实现:

@PostMapping(value = "/products", consumes = MediaType.MULTIPART_FORM_DATA_VALUE )
public ResponseEntity<ResponseMessage> postProduct(@NonNull @RequestPart(value = "request") final MyJsonBody postRequest,
@NonNull @RequestPart(value = "files") final List<MultipartFile> files)
{
validateFileTypes(files);
log.info("Request id and name fields: " + postRequest.getProductId() + ", " + postRequest.getProductName() + ".");
log.info("Received a total of: " + files.size()  + " files.");
storeFiles(files);
return success("Request processed!", null, HttpStatus.OK);
}

为了限制上传文件的大小,我在application.properties:中有以下内容

# Constrain maximum sizes of files and requests
spring.http.multipart.max-file-size=20MB
spring.http.multipart.max-request-size=110MB

我通过上传一个大文件测试了这些密钥的行为,虽然它们运行良好,但返回给用户的消息并没有特别说明发生了什么:

{
"timestamp": "2021-01-05T14:07:14.577+00:00",
"status": 500,
"error": "Internal Server Error",
"message": "",
"path": "/rest/products"
}

如果上传的文件太大,我有没有办法让SpringBoot自动提供message,或者我只能通过上面显示的postProduct方法中我自己的自定义控制器逻辑来做到这一点?

您需要使用HandleExceptionResolverControllerAdvice(或RestControllerAdvice(来处理MaxUploadSizeExceededException

类似这样的东西:

@RestControllerAdvice
public class CustomExceptionHandler {
@ExceptionHandler({
MaxUploadSizeExceededException.class
})
public ResponseEntity<Object> handleMaxUploadSizeExceededException(MaxUploadSizeExceededException ex) {
Map<String, Object> body = new HashMap<>();
body.put("message", String.format("Max upload limit exceeded. Max upload size is %d", ex.getMaxUploadSize()));
return ResponseEntity.unprocessableEntity().body(body);
}
}

最新更新