Spring 使用@Valid 注释的@RequestBody 验证问题
Spring @RequestBody validation issue using @Valid annotation
我正在尝试使用 @Valid
注释对 Spring Boot @RequestBody
JSON 对象执行验证。
此 JSON 对象 POJO class 将包含另一个嵌套对象。
我为嵌套对象添加了字段级注释 classes.
此外,我在主对象 class.
中添加嵌套 class 对象时添加了 @Valid
注释
但是,当我们没有传递正确的对象时,嵌套 class 对象的验证仍然不会被触发。
请找到下面的代码以供参考。
ExceptionController.class
@RestController
@RequestMapping("/student")
public class ExceptionController {
@PostMapping
@ResponseStatus(HttpStatus.CREATED)
public String createStudent(@Valid @RequestBody Student student, HttpStatus status) {
Student student1 = student;
return "student data created!!";
}
}
Student.class
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Student {
@NotEmpty(message = "First Name field can not be null or empty")
@NotBlank(message = "First Name field can not be blank")
private String firstName;
@NotEmpty(message = "Last Name field can not be null or empty")
@NotBlank(message = "Last Name field can not be blank")
private String lastName;
@Valid
private Subject subject;
}
Subject.class
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Subject {
@NotEmpty(message = "Topic field can not be null or empty")
@NotBlank(message = "Topic field can not be blank")
private String topic;
}
当我没有在请求中为 Subject
发送任何数据时,它没有给出任何异常和 returns HTTP 200 OK 状态。
任何帮助将不胜感激。
尝试将 @NotNull
注释添加到 Subject subject
:
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Student {
@NotEmpty(message = "First Name field can not be null or empty")
@NotBlank(message = "First Name field can not be blank")
private String firstName;
@NotEmpty(message = "Last Name field can not be null or empty")
@NotBlank(message = "Last Name field can not be blank")
private String lastName;
@Valid
@NotNull
private Subject subject;
}
只有当您实际发送 Subject
数据但 topic
属性为空时,您当前的验证才会起作用。
关于另一个主题,您可能会删除 @NotEmpty
注释,因为 @NotBlank
不允许 null
或空字符串。
我正在尝试使用 @Valid
注释对 Spring Boot @RequestBody
JSON 对象执行验证。
此 JSON 对象 POJO class 将包含另一个嵌套对象。 我为嵌套对象添加了字段级注释 classes.
此外,我在主对象 class.
中添加嵌套 class 对象时添加了@Valid
注释
但是,当我们没有传递正确的对象时,嵌套 class 对象的验证仍然不会被触发。
请找到下面的代码以供参考。
ExceptionController.class
@RestController
@RequestMapping("/student")
public class ExceptionController {
@PostMapping
@ResponseStatus(HttpStatus.CREATED)
public String createStudent(@Valid @RequestBody Student student, HttpStatus status) {
Student student1 = student;
return "student data created!!";
}
}
Student.class
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Student {
@NotEmpty(message = "First Name field can not be null or empty")
@NotBlank(message = "First Name field can not be blank")
private String firstName;
@NotEmpty(message = "Last Name field can not be null or empty")
@NotBlank(message = "Last Name field can not be blank")
private String lastName;
@Valid
private Subject subject;
}
Subject.class
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Subject {
@NotEmpty(message = "Topic field can not be null or empty")
@NotBlank(message = "Topic field can not be blank")
private String topic;
}
当我没有在请求中为 Subject
发送任何数据时,它没有给出任何异常和 returns HTTP 200 OK 状态。
任何帮助将不胜感激。
尝试将 @NotNull
注释添加到 Subject subject
:
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Student {
@NotEmpty(message = "First Name field can not be null or empty")
@NotBlank(message = "First Name field can not be blank")
private String firstName;
@NotEmpty(message = "Last Name field can not be null or empty")
@NotBlank(message = "Last Name field can not be blank")
private String lastName;
@Valid
@NotNull
private Subject subject;
}
只有当您实际发送 Subject
数据但 topic
属性为空时,您当前的验证才会起作用。
关于另一个主题,您可能会删除 @NotEmpty
注释,因为 @NotBlank
不允许 null
或空字符串。