@InitBinder验证之前如何执行代码

时间:2019-01-09 13:31:26

标签: java spring spring-boot spring-mvc spring-mvc-initbinders

我有一个程序,该程序可以上传文件,然后验证其名称格式是否正确并将其保存到数据库。

在我的主控制器中,我使用@InitBinder进行验证。

@InitBinder("uploadFileForm")
    protected void initBinderUploadForm(WebDataBinder binder) {
        binder.setValidator(fileNameFormatValidator);
    }

在我的验证器方法中,我使用以下代码片段:

static void validateFileName(String fileUploadKey, MultipartFile file, Errors errors) {
        Matcher validFilenameMatcher = VALID_FILE_NAME.matcher(file.getOriginalFilename());
        if (!validFilenameMatcher.matches()) {
            errors.rejectValue(fileUploadKey, null, null, SOME_REGEX);
        }
    }

我想做的是,我想格式化文件名(例如替换文件名中的某些字符),然后使用验证器类。因此,我需要在验证之前更改文件名。

在使用 @InitBinder 验证格式之前,如何实现文件名的编辑?

编辑:没人回答?还是这个问题不清楚?

1 个答案:

答案 0 :(得分:1)

为什么不像添加验证器那样使用WebDataBinder的{​​{3}}?

@InitBinder("uploadFileForm")
protected void initBinderUploadForm(WebDataBinder binder) {
    binder.addCustomFormatter(fileNameFormatter); 
    binder.setValidator(fileNameFormatValidator);
}