【问题标题】:Custom bean validation not working自定义 bean 验证不起作用
【发布时间】:2016-03-27 08:32:30
【问题描述】:

在我的 Student 类中,我有许多字段存储在数据库中,并且我还有一个字段用于存储照片(因为我使用 MultiPartFile 数据类型)并且我正在使用自定义验证来验证此字段。

下面是验证代码

@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 中的许多帖子,但找不到与此特定问题的任何关系。

注意:-如果我从控制器中删除验证代码,则代码可以正常执行所有应执行的验证。

【问题讨论】:

    标签: spring hibernate validation bean-validation


    【解决方案1】:

    您在示例中混合了方法。您没有在代码示例中显示导入,但 PhotoValidator 类没有实现 Bean Validation 约束。它可能是一些 Spring/JSF 特定的验证器!?

    要实现一个 Bean Validation 约束,你需要定义一个约束注解和至少一个实现ConstraintValidator。这一切都在Creating custom constraints 中进行了描述。有很多示例如何编写自定义约束。

    【讨论】:

    • 我已经单独实现了上面的代码并且它运行了,这里是我学习这个websystique.com/springmvc/…的网站,问题是当我在我的应用程序中实现它时它不会运行。 ==>我想要实现的是验证 .jpg 和空文件就是这样。
    猜你喜欢
    • 2017-02-12
    • 2017-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-20
    • 1970-01-01
    相关资源
    最近更新 更多