@NotNull约束在Spring Boot中不起作用

时间:2018-11-04 19:48:43

标签: java spring spring-mvc spring-boot

我正在使用Spring Boot,@ NotNull无法正常工作。当未提供名称值时,该功能运行正常。

@Entity
public class Employee  implements Serializable{
    @Id
    //@GeneratedValue(strategy=GenerationType.AUTO)
    private int id;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    //@Id
    public void setName(String name) {
        this.name = name;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }

    @NotNull  // not working
    private String name;
    private String phone;
}

控制器是

@Controller
public class URLController {
    @Autowired
    EmployeeServiceImpl empService;

    @GetMapping({"/", "/index"})
    public String index1(Model model){
        model.addAttribute("employee",new Employee());
        return "index";
    }

    @PostMapping("/result")
    public String result(@Valid @ModelAttribute Employee employee){
        System.out.print(employee.getName()); 
        empService.save(employee);
        return "result"; 
    }
}

pom.xml

http://maven.apache.org/xsd/maven-4.0.0.xsd“>     4.0.0

<groupId>com.springs</groupId>
<artifactId>springs</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>springs</name>
<description>Demo project for Spring Boot</description>

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.6.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>


    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

我正在使用model属性获取雇员对象。 pom.xml文件包含休眠验证器依赖项。

2 个答案:

答案 0 :(得分:0)

例如,您必须在代码的映射部分中添加@Valid注释

Integer

使用此导入“ import javax.validation.Valid;”

另一个注意事项,如果要验证列表,则必须制作包装列表 像

String

并覆盖其中的所有方法

答案 1 :(得分:0)

尝试使用如下所示的修改方法来检查有关错误的详细信息。

@PostMapping("/result")
    public String result(@Valid @ModelAttribute("employee") Employee employee, BindingResult bindingResult){
        List<FieldError> errors = bindingResult.getFieldErrors();
        for (FieldError error : errors ) {
         System.out.println (error.getObjectName() + " - " +error.getDefaultMessage());
        }
        System.out.print(employee.getName()); 
        empService.save(employee);
        return "result"; 
    }

如果bindingResult中没有错误,请参考notnull-constraint-not-working进行进一步的故障排除。