@Valid @ModelAttribute 无法正常工作

Posted

技术标签:

【中文标题】@Valid @ModelAttribute 无法正常工作【英文标题】:@Valid @ModelAttribute not working properly 【发布时间】:2020-09-15 16:02:44 【问题描述】:

我有这个控制器

@Controller
public class EmpleadoController 
    @Autowired
    private EmpleadoService servicio;

    @PostMapping("/empleado/new/submit")
    public String nuevoEmpleadoSubmit(@Valid @ModelAttribute("empleadoForm") Empleado empleadoForm, BindingResult bindingResult) 
        if(bindingResult.hasErrors()) 
            return "formulario";
        else 
            servicio.add(empleadoForm);
            return "redirect:/empleado/list";
        
    

有了这个模型

package com.alexotero.spring.model;

import javax.validation.constraints.Email;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotEmpty;

public class Empleado 

    @Min(0)
    private long id;
    @NotEmpty
    private String nombre;
    @Email
    private String email;
    private String telefono;

//Constructors getters setters and stuff

我还在 pom.xml 中添加了这个依赖项

<dependency>
  <groupId>javax.validation</groupId>
  <artifactId>validation-api</artifactId>
</dependency>

无论我在表单中介绍什么,控制器都不会检测到任何错误。始终将对象添加到列表(在服务中)并重定向到 list.html。我找不到问题出在哪里。

【问题讨论】:

只添加 api 不会做任何事情。您还需要像hibernate-validator 这样的实现。而不是添加 validation-api 使用 spring-boot-starter-validation ,其中包括 api 和实现。 您能否提供您尝试发送的正文以进行测试? 非常感谢!不知道执行情况。它奏效了。 【参考方案1】:

就我而言,我删除了这个依赖项

<dependency>
  <groupId>javax.validation</groupId>
  <artifactId>validation-api</artifactId>
</dependency>

并添加

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

我认为它们相互冲突。

【讨论】:

以上是关于@Valid @ModelAttribute 无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

@Valid springMVC bean校验不起作用及如何统一处理校验

@ModelAttribute 使用 thymeleaf 返回空值

@ModelAttribute运用详解

@ModelAttribute 的使用

spring学习之@ModelAttribute运用详解

Spring MVC @ModelAttribute 方法