springboot用注解@Validated和@NotNull分组写一个入参对象中的参数不能为null的实例
时间: 2024-05-04 21:21:03 浏览: 145
可以使用 `@Validated` 和 `@NotNull` 注解来实现对入参对象中的参数进行非空校验,并且可以使用分组校验来对不同分组进行不同的校验。
首先,定义一个入参对象,例如:
```java
public class User {
@NotNull(groups = {Add.class, Update.class}, message = "id不能为空")
private Long id;
@NotBlank(groups = {Add.class, Update.class}, message = "用户名不能为空")
private String username;
@NotBlank(groups = {Add.class}, message = "密码不能为空")
private String password;
// 省略其他属性和方法
}
```
在上述代码中,使用了 `@NotNull` 和 `@NotBlank` 注解来对 `id`、`username` 和 `password` 进行非空校验,并且使用了分组校验来对不同分组进行不同的校验。
接着,在 Controller 层中使用 `@Validated` 注解来启用校验功能,并且在需要进行校验的入参对象前使用 `@Valid` 注解来表示需要对该对象进行校验。例如:
```java
@RestController
@RequestMapping("/user")
@Validated
public class UserController {
@PostMapping("/add")
public String addUser(@Validated(Add.class) @RequestBody User user) {
// 省略业务逻辑
return "success";
}
@PostMapping("/update")
public String updateUser(@Validated(Update.class) @RequestBody User user) {
// 省略业务逻辑
return "success";
}
}
```
在上述代码中,使用了 `@Validated(Add.class)` 和 `@Validated(Update.class)` 注解来指定不同的分组,分别对应添加用户和修改用户的场景,这样就可以根据不同的场景进行不同的校验。
最后,需要定义分组接口,例如:
```java
public interface Add {}
public interface Update {}
```
在上述代码中,定义了 `Add` 和 `Update` 两个分组接口,用来在入参对象的属性上标记需要进行校验的属性。
这样,当调用添加用户和修改用户的接口时,就会根据不同的分组进行不同的校验,从而保证了入参对象中的参数不能为 null。
阅读全文