繁体   English   中英

Spring 启动:非实体 bean 验证不起作用

[英]Spring boot : non-entity bean validation not working

我有正常的Java POJO class,它不是一个实体class,名为Student。 我正在使用 spring 引导验证器。 在我的 REST controller 内,对于一个学生 object 的请求,将返回。 我在学生 class 中设置了不同的验证。 但验证不起作用。 我已经给出了 10 到 30 岁的年龄限制。但它正在创建 35 岁的 Object。 有什么办法可以使这个验证工作? 注意:我这样做是为了测试,如果此验证有效,我将在我的主项目中使用它。

学生

package com.mkyong;

import org.springframework.beans.factory.annotation.Required;
import org.springframework.validation.annotation.Validated;

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

@Validated
public class Student {

    @NotEmpty
    private String id;
    @NotEmpty
    private String name;
    @Min(10)
    @Max(30)
    private int age;

    public Student() {
    }

    public Student(String id, String name, @Min(10) @Max(30) int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge( @Min(10) @Max(30) int age) {
        this.age = age;
    }
}

**休息Controller:**

public class BookController {

    // Find
    @GetMapping("/student")
    Student studentCreate() {
        Student student = new Student("","",35);
        student.setAge(36);
        return student;
    }
}
  • 如果您的请求正文参数将使用@Valid注释进行注释,您的实体将被自动验证
  • 您可以使用以下方法手动验证您的实体: javax.validation.Validator

按照你的情况:

  • 在 BookController 中注入验证器
  • 使用您的 DTO 作为参数调用Validator#validate
  • 检查是否存在违规行为
public class BookController {

    @Autowired
    Validator validator;

    // Find
    @GetMapping("/student")
    Student studentCreate() {
        Student student = new Student("","",35);
        student.setAge(36);
        Set<ConstraintViolation<Student>> result = validator.validate(student);
        if (!result.isEmpty()) {
                //do here whatever you want with each validation violation.
        }
        return student;
    }
}

有关更多详细信息,请查看官方文档: https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#validation

注意:取决于您的 spring 启动版本,您的依赖项中可能缺少org.springframework.boot:spring-boot-starter-validation依赖项,因此请仔细检查它是否存在。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM