java - Spring Boot:非实体 bean 验证不起作用
问题描述
我有普通的 Java POJO 类,它不是实体类,名为 Student。我正在使用弹簧启动验证器。在我的 REST 控制器中,对于一个请求,只会返回一个学生对象。我在 Student 类中设置了不同的验证。但验证不起作用。我已经给出了 10 到 30 岁的年龄限制。但它正在创建 35 岁的对象。有什么办法可以使这个验证工作?注意:我这样做是为了测试,如果这个验证有效,我将在我的主项目中使用它。
学生
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;
}
}
**休息控制器:**
public class BookController {
// Find
@GetMapping("/student")
Student studentCreate() {
Student student = new Student("","",35);
student.setAge(36);
return student;
}
}
解决方案
- 如果您的请求正文参数将使用注释进行
@Valid
注释,您的实体将被自动验证 - 您可以使用以下方法手动验证您的实体:
javax.validation.Validator
按照你的情况:
- 在 BookController 中注入验证器。
Validator#validate
使用您的 DTO 作为参数调用。- 检查是否存在违规行为
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 Boot 版本,您的org.springframework.boot:spring-boot-starter-validation
依赖项中可能缺少依赖项,因此请仔细检查它是否存在。
推荐阅读
- visual-studio - VS2019 上的 LogicApps 说“无法识别术语 'Get-AzureRmResourceGroup'”
- php - Can't catch Ldap_add exception
- delphi - loadfromfile 上的 TStringlist 错误:目标多字节代码页中不存在 Unicode 字符的映射
- html - 如何使用 CSS 将文本颜色作为背景图像?
- python - 如何将 BeautifulSoup Div Tag 对象作为字典读取
- d3.js - 将 d3js 图表 xAxis 和 yAxis 字体系列的 sans-serief 覆盖为自定义一个
- python - Python 正则表达式错误:无法使用 re.match 函数获得正确的结果
- javascript - 通过在Javascript中用零填充空元素来修复具有不同长度行的数组
- c - C ; 运营商使用
- excel - 在excel VBA中使用具有相同ID的值填充空白单元格