如何使用HibernateValidator验证MultipartFile?

时间:2012-12-04 22:47:28

标签: spring hibernate validation multipartform-data hibernate-validator

我在支持bean中有一个类型MultipartFile的字段,它绑定到一个Spring表单(我正在使用MultipartFilter),

<form:form htmlEscape="false" action="${pageContext.request.contextPath}/admin_side/Category.htm" id="dataForm" name="dataForm" method="post" commandName="categoryBean" enctype="multipart/form-data">

    <input type="file" id="txtCatImage" name="txtCatImage"/>

</form:form>

Backing Bean,

final public class CategoryBean
{
     private MultipartFile txtCatImage=null;

     public MultipartFile getTxtCatImage()
     {
          return txtCatImage;
     }

     public void setTxtCatImage(MultipartFile txtCatImage)
     {
         this.txtCatImage = txtCatImage;
     }
}

我尝试过应用@NotEmpty这样的注释,但没有用。他们最终有一个例外。

  

javax.validation.UnexpectedTypeException:找不到验证程序   对于类型:org.springframework.web.multipart.MultipartFile

我正在使用Validation-API 1.0.0。如果用户没有上传文件并使用HibernateValidator按下提交按钮,是否可以执行验证?

2 个答案:

答案 0 :(得分:3)

现在我明白了你要特别想要完成的事情。那么你可以实现自己的自定义验证。例如,不是实现Spring验证器接口,而是为您为此特定情况定义的特定注释实现Hibernate ConstraintValidator。检查此link。在这种情况下,您可以为@NotNull对象的MultipartFile验证程序添加实现。

答案 1 :(得分:2)

对bean方法检查文件施加约束空虚对我有用:

final public class CategoryBean
{
  private MultipartFile txtCatImage = null;
  public MultipartFile getTxtCatImage() { return txtCatImage; }
  public void setTxtCatImage(MultipartFile txtCatImage) { this.txtCatImage = txtCatImage; }

  @AssertTrue(message = "File must be provided")
  public boolean isFileProvided() {
    return (txtCatImage != null) && ( ! txtCatImage.isEmpty());
  }
}