2016-03-27 10 views
0

私のStudentクラスでは、私はデータベースに格納するフィールドが多く、MultiPartFileデータ型を使用しているので、カスタムフィールドを使ってこのフィールドを検証しています。 。以下はカスタムBeanの検証が機能しない

私はこの

@InitBinder 

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

私の学生モデルがあるようにそれを実装していますコントローラで検証

@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"); 
     } 
    } 

} 

ためのコードである: -

@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検証制約を実装するには、制約注釈を定義し、少なくとも1つはConstraintValidatorを実装する必要があります。これはすべてCreating custom constraintsに記載されています。カスタム制約を記述する方法はたくさんあります。

+0

私は上記のコードを別々に実装しています。これは、ここで私がこれを学んだウェブサイトですhttp://websystique.com/springmvc/spring-mvc-4-file-upload-example-using-commons- fileupload /、問題は私が実行しない私のアプリケーションで同じを実装するときです。 ==>私が達成したいのは、.jpgとそれが空のファイルであることを検証することです。 –