java - spring 3 带文件上传的自动表单字段验证

标签 java spring

我将 JSR 303 验证与 hibernate validator 结合使用,通过在 Controller 方法上指定 @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>

Controller :

@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 {
                .....

最佳答案

您的问题出在方法参数顺序上。 @ModelAttribute 必须后跟 BindingResult 参数。看Spring documentation并检查示例 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;
    }
}

关于java - spring 3 带文件上传的自动表单字段验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14567912/

相关文章:

JavaFX 通过 setOnKeyPressed 更新当前位置

java - Spring Security 按角色获取用户列表

java - Apache Camel : RouteBuilder with CxfEndpoint

java - HQL 在 executeUpdate 上生成不完整的 'cross join'

java - 系统找不到路径

java - @Autowired 找不到存储库 bean

java - 如何查看spring ldapTemplate生成的查询

java - 与公共(public)API的连接

java - 为什么 Spring 框架不允许 Autowiring 原始类型?

java - 在 Spring Boot 应用程序中验证 json