2016-03-27 135 views
0

在我的學生類中,我有很多字段,我存儲在數據庫中,我也有一個字段來存儲照片(爲此我使用MultiPartFile數據類型),我使用自定義驗證驗證此字段。自定義bean驗證不工作

下面是驗證

@Component 
public class PhotoValidator implements Validator{ 

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

    @Override 
    public void validate(Object target, Errors errors) { 
     Student student=(Student)target; 

     if(student.getStudentPhoto()!=null){ 
      if(student.getStudentPhoto().getSize()==0){ 
       errors.rejectValue("file", "missing.file"); 
      } 
     } 
     if(!student.getStudentPhoto().getOriginalFilename().endsWith(".jpg")){ 
      errors.rejectValue("file", "invalid.file"); 
     } 
    } 

} 

代碼在控制器我喜歡這個

@InitBinder 

protected void initBinderStudent(WebDataBinder binder) {  binder.setValidator(photoValidator); 
    } 

我的學生模型實現它: - 照片的

@Entity 
@Table(name = "STUDENT") 
public class Student extends UrlEntity { 

    @Transient 
    MultipartFile studentPhoto; 

    @Column(name = "COURSE_TYPE", nullable = false) 
    @NotNull(message = "Course Type: Course Type can not be left blank") 
    private in.jmi.constants.CourseType courseType; 

    @OneToOne(cascade = CascadeType.ALL, optional = false) 
    @JoinColumn(name = "STUDENT_USER") 
    @Valid 
    private User user; 

這種自定義的驗證沒有工作,它也弄亂了我在這裏的其他基於註解的驗證。

我已經檢查了很多帖子在stackoverflow但找不到任何關係到這個特定的問題。

注意:如果我從控制器中刪除驗證代碼,代碼可以很好地執行所有它應該執行的驗證。

回答

0

你正在混合你的例子中的方法。您沒有在代碼示例中顯示導入,但PhotoValidator類未實現Bean驗證約束。它可能是一些Spring/JSF特定的驗證器!?

要實現Bean驗證約束,您需要定義一個約束註釋並至少執行一個ConstraintValidator。這全部在Creating custom constraints中描述。有很多例子可以說明如何編寫自定義約束。

+0

我已經分別實現了上面的代碼,它運行,這裏是我從哪裏學習這個網站http://websystique.com/springmvc/spring-mvc-4-file-upload-example-using-commons- fileupload /,問題是當我在我的應用程序中實現它不運行時。 ==>我想實現的是驗證.jpg和空文件是它。 –