Проверка во время пост-сопоставления не вызывает функцию isValid ConstraintValidator - PullRequest
1 голос
/ 09 апреля 2020

Я реализовал пост-отображение в одном из контроллеров:

@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 свойство в моей модели формы является нулевым. Поскольку я использую тимили для создания форм и аннотаций для проверки, мне нужно иметь правильное значение file внутри моего объекта модели.

...