@valid 注释未按预期工作

kar*_*nna 4 java spring-data spring-data-jpa spring-boot

我正在使用请求负载中的对象数组调用 API,我在 @RequestBody 中添加了 @valid 注释,以检查负载中是否发送了任何 null 属性。我希望如果我发送的任何空数据都会引发错误。但我的代码没有抛出错误

下面是我的实体类

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@DynamicUpdate
@Entity
@Table(name = "student")
public class Student {

   @Id
   @Column(name = "student_id")
   @GeneratedValue(strategy = GenerationType.IDENTITY)
   private Integer studentId;

   @NotNull
   @Column(name = "name")
   private String name;

   @NotNull
   @Column(name = "gender")
   private String gender;

}
Run Code Online (Sandbox Code Playgroud)

这是我的控制器类

@RestController
@CrossOrigin
public class StudentController {

   @PostMapping("/class/{classId}/student")
   public Student addStudent(@PathVariable Integer classId,@Valid @RequestBody List<Student>  
           student) {

     // My logic Comes Here
     return Student;
    }
  }
Run Code Online (Sandbox Code Playgroud)

验证依赖性

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-validation</artifactId>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

我的请求负载

[{
   "name":"kiran",
   "gender":"male"
 },
 {
    "name":"divya"
 } 
]
Run Code Online (Sandbox Code Playgroud)

当我发送上述有效负载时,我预计需要抛出一个错误,因为我没有发送不为空的性别,但 spring 不会抛出任何错误。

我是否错过了@valid 工作的一些东西?

小智 7

如果您使用 Spring boot 2.3.3.RELEASE。然后在POM中添加以下依赖:

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-validation</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)

使用示例:

//update audTipo
@PutMapping("audTipo/{id}")
public ResponseEntity<AudTipo> update(@PathVariable(value="id") Integer audTipoId, 
        @Valid @RequestBody AudTipo audTipoDetils) throws ResourceNotFundException
{   
    
      AudTipo audTipo = audTipoRepository.findById(audTipoId).orElseThrow(()-> new
      ResourceNotFundException("NF " + audTipoId));
      audTipo.setXdesc(audTipoDetils.getXdesc());
      
      return ResponseEntity.ok(this.audTipoRepository.save(audTipo));    
}
Run Code Online (Sandbox Code Playgroud)