gpt4 book ai didi

java - Spring 文件上传。要求文件存在

转载 作者:行者123 更新时间:2023-12-01 11:41:16 25 4
gpt4 key购买 nike

我有简单的 Controller 方法来接收文件:

  @ResponseBody
public MyDto createProduct(MyDto dto, @RequestParam(value = "file") MultipartFile file) {

}

问题是如果用户没有在表单中选择文件,Spring 不会抛出异常。但我需要确保用户选择了某个文件。我尝试添加 required = true 但没有帮助(而且默认设置为 true)

实际上,只有当我的表单根本不包含名为 file 的参数时,Spring 才会抛出异常:

Required MultipartFile parameter 'file' is not present

但是如果参数存在并且文件不是以 HTML 形式选择的,那么也不异常(exception)。

如何解决这个问题?

谢谢

最佳答案

您可以将 MultipartFile 文件 作为 DTO 的属性推送,并编写自定义验证注释,例如@FilePresent。你的签名会是这样的

  public MyDto createProduct(@Validated MyDto dto, BindingResult result) 

您将在MyDto内注释您的文件属性

@FilePresent
private MultipartFile file;

您的自定义验证代码将类似于:

@FilePresent 注释

<小时/>
@Documented
@Retention(RUNTIME)
@Constraint(validatedBy = {FilePresentMultipartFileValidator.class})
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
public @interface FilePresent {

String message() default "{your.package.FilePresent.message}";

Class<?>[] groups() default {};

Class<? extends Payload>[] payload() default {};

String value() default "true";
}

自定义 validator

<小时/>
public class FilePresentMultipartFileValidator implements ConstraintValidator<FilePresent, MultipartFile> {

@Override
public void initialize(FilePresent constraintAnnotation) {
//NOOP
}

@Override
public boolean isValid(MultipartFile value, ConstraintValidatorContext context) {
return !(value == null || value.isEmpty());
}

}

最后一步是在类路径(和/或其本地化等效项)上有一个 ValidationMessages.properties 文件,其键为 your.package.FilePresent.message 以及您选择的消息值

关于java - Spring 文件上传。要求文件存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29503394/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com