抱歉,我无法找到更好的方法来构建问题。
我正在尝试在服务器端验证从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
方法验证它,但我不想在控制器类中使用验证码
请求处理程序方法。