Java Spring引导:非实体bean验证不起作用
我有一个普通的JavaPOJO类,它不是一个实体类,名为Student。我正在使用spring启动验证程序。在我的REST控制器中,对于请求,只返回一个学生对象。我在学生课堂上设置了不同的验证。但这种验证是行不通的。我把年龄限制在10到30岁之间。但它正在创造一个35岁的物体。有什么方法可以让这个验证有效吗?注意:我做这个测试,如果这个验证工作,我将在我的主要项目中使用它 学生Java Spring引导:非实体bean验证不起作用,java,spring,spring-boot,validation,Java,Spring,Spring Boot,Validation,我有一个普通的JavaPOJO类,它不是一个实体类,名为Student。我正在使用spring启动验证程序。在我的REST控制器中,对于请求,只返回一个学生对象。我在学生课堂上设置了不同的验证。但这种验证是行不通的。我把年龄限制在10到30岁之间。但它正在创造一个35岁的物体。有什么方法可以让这个验证有效吗?注意:我做这个测试,如果这个验证工作,我将在我的主要项目中使用它 学生 package com.mkyong; import org.springframework.beans.facto
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中注入验证程序
- 使用DTO作为参数调用
Validator#validate
- 检查是否有病毒
公共类BookController{
@自动连线
验证器;
//发现
@GetMapping(“/student”)
学生创建(){
学生=新生(“,”,35);
学生年龄(36岁);
设置结果=validator.validate(学生);
如果(!result.isEmpty()){
//在这里,您可以对每个验证冲突执行任何操作。
}
留学生;
}
}
有关更多详细信息,请查看官方文档:
注意:
取决于您的spring boot版本,
org.springframework.boot:spring boot starter验证
依赖项可能在您的依赖项中丢失,因此请仔细检查它是否存在。如果您正在创建具有新属性的学生,验证应该如何工作?尝试向学生发送POST请求,并使用@Valid
@burm87注释参数new有什么问题?使用new创建对象不会触发验证。这是一个基于注释的验证。那么,@BlackSwan,您希望何时进行此验证?我猜什么时候调用你的API?@burm87实际上我不会使用学生作为请求主体。我想大致验证一下。