1

我使用带有休眠验证器的 JSR 303 验证,通过在控制器方法上指定 @Valid 来自动验证字段。验证工作正常。我知道在表单中添加了一个上传字段,并添加了一个 @RequestParam("file") 作为 MultipartFile 文件。现在它只有在所有字段在提交时都有效时才有效,否则我会收到 404(错误请求)。如果我删除 @Valid 注释,我会得到 javax.validation.ConstraintViolationException,其中包含状态 500 的所有验证违规。

我正在使用 Spring 3.2

我的表格:

    <form action="#springUrl("/admin/stores/save")" method="POST" enctype="multipart/form-data">
Name: 
  #springBind( "store.name" )
  <input type="text" 
    name="${status.expression}" 
    value="$!status.value" /><br>
......
   <input type="file" name="file" accept="image/*">

  <input type="submit" value="submit"/>
</form>

控制器:

@RequestMapping(value="/save", method = RequestMethod.POST)
    @Transactional
    public String save(@Valid @ModelAttribute Store store, @RequestParam("file") MultipartFile file, BindingResult bindingResult, ModelMap model) {
        if (bindingResult.hasErrors()) {
            model.addAttribute("message", "Failed");
            model.addAttribute("store", store);
            return "admin/stores/form";
        } else {
                .....
4

1 回答 1

4

您的问题在于方法参数顺序。@ModelAttribute后面必须跟BindingResult论据。查看Spring 文档并检查示例 17.1。BindingResult 和 @ModelAttribute 的排序无效

. 如果它是其中的一部分,您还应该添加MultipartFile到表单类 ( ) 中。Store

Store {

    /* Your other fields */

    @NotNull
    private  MultipartFile file;

    public MultipartFile getFile() {
        return file;
    }

    public void setFile(MultipartFile file) {
        this.file= file;
    }
}
于 2013-01-29T12:02:05.883 回答