java - 后映射期间的验证不会调用 ConstraintValidator 的 isValid 函数
问题描述
我已经在控制器之一中实现了后映射:
@PostMapping("/management/upload/")
fun uploadMultipartFile(@FileNotEmpty @RequestParam("file") file: MultipartFile,
@Valid @ModelAttribute("form") model: FileUploadForm): ModelAndView {
print("POST::RECEIVED")
return ModelAndView("management/upload", "form", FileUploadForm())
}
不幸的是,在没有调用isValid()
函数的情况下接收到请求,我在下面的验证器中实现了该函数。我尝试了许多 ( @FileNotEmpty, @RequestParam(...), @Valid
) 的排列,但都没有奏效。我不知道为什么没有调用这个验证,而它是由这个注释标记的。
这是表单类:
data class FileUploadForm(
@FileNotEmpty
val file: MultipartFile? = null
)
验证注释:
@Constraint(validatedBy = [FileNotEmptyValidatorForMultipartFile::class])
@Target(AnnotationTarget.FIELD,
AnnotationTarget.FUNCTION,
AnnotationTarget.FILE,
AnnotationTarget.PROPERTY,
AnnotationTarget.ANNOTATION_CLASS,
AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.VALUE_PARAMETER)
@Retention(AnnotationRetention.RUNTIME)
annotation class FileNotEmpty (
val message: String = "{javax.validation.constraints.NotBlank.message}",
val groups: Array<KClass<out Any>> = [],
val payload: Array<KClass<out Any>> = []
)
最后,验证器:
class FileNotEmptyValidatorForMultipartFile : ConstraintValidator<FileNotEmpty, MultipartFile> {
override fun isValid(value: MultipartFile?, context: ConstraintValidatorContext?): Boolean {
if (value == null) {
return false
}
return !value.isEmpty || value.name.isNotEmpty()
}
}
编辑:
@RequestParam("file")
为我提供了适当的价值,但同时file
我的表单模型中的属性为空。由于我使用 thymeleaf 创建表单和注释以进行验证,因此我需要file
在模型对象中具有适当的值。
解决方案
推荐阅读
- python - fbi 如何在没有键盘输入的情况下迭代地显示图像
- java - 递归生成子集的问题
- reactjs - 我如何在 React Native FaceBook 中使用此代码获取用户名和个人资料图片
- azure-devops - 本地 Jenkins 到 Azure DevOps 迁移
- javascript - 带有 chevron 的 Bootstrap 切换在生产和本地工作中有所不同
- java - Scala 14:错误:单元不带参数
- sql - 计算百分比和计数
- rust - Rust protobuf 序列化都搞砸了
- dart - 如何在 Flutter 上创建像 Skype 这样的 Toast 的 Connection Snackbar?
- excel - Excel 仅汇总特定数字