具有MultipartFile类支持的Spring自定义验证器类不会被调用/触发

时间:2017-09-03 01:51:24

标签: spring spring-mvc

抱歉,我无法找到更好的方法来构建问题。

我正在尝试在服务器端验证从Ajax multipart / form-data post请求收到的带有其他信息(例如电子邮件,电话号码等)的multipartfile数组。 我通过实现Spring Validator接口UserFilesValidator创建了2个自定义验证器类,以检查所有收到的文件是否为图像文件且不超过2MB 并UserInfosValidator检查其他用户信息,例如电话号码验证,电子邮件可用性等 我使用@InitBinder注册了自定义验证器类。

现在发出请求时,UserInfosValidator被调用并且工作正常,但UserFilesValidator没有被调用

这是我的代码

控制器类

@Controller
public class UserController{

    private final UserFilesValidator userFilesValidator;
    private final UserInfosValidator userInfosValidator;

    @Autowired
    public UserController(UserFilesValidator userFilesValidator, UserInfosValidator userInfosValidator){
        this.userFilesValidator = userFilesValidator;
        this.userInfosValidator = userInfosValidator;
    }

    @InitBinder("userfiles")
    public void formDataBinder1(WebDataBinder binder){
        binder.addValidators(userFilesValidator);
    }

    @InitBinder("userinfos")
    public void formDataBinder2(WebDataBinder binder){
        binder.addValidators(userInfosValidator);
    }

    @RequestMapping(value = "/add", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    @ResponseBody
    public ResponseEntity<UserEntity> addUser(@RequestParam("userfiles") @Valid MultipartFile[] files,
                                                            @RequestPart("userinfos") @Valid UserEntity user){
        //codes ...
    }

}

验证员类

@Component
public class UserFilesValidator implements Validator {

    @Override
    public boolean supports(Class<?> clazz) {
        return MultipartFile[].class.isAssignableFrom(clazz);
    }

    @Override
    public void validate(Object target, Errors errors) {
        MultipartFile[] files = (MultipartFile[]) target;
    //validation codes ...
}

}

我排除了UserInfosValidator课程,因为它工作正常。 我也没有包含全局异常处理程序类(&#39; s @ControllerAdvice注释类) 因为错误必须在UserFilesValidator类中注册,甚至没有被调用。

那么请问我怎么能让它发挥作用?我知道我可以用addUser方法验证它,但我不想在控制器类中使用验证码 请求处理程序方法。

0 个答案:

没有答案