JAX-RS(Java API for RESTful Web Services) RESTful服务接口接口中使用@Validated 进行分组校验对象入参为生效是什么原因?怎么解决?
时间: 2024-03-03 10:49:45 浏览: 88
Java-Web-Service:带有JAX-RS的示例RESTful API(在MySQL数据库上实现基本的HTTP方法)
如果在 JAX-RS RESTful 服务接口中使用 @Validated 进行分组校验,但是校验对象入参为生效,可能是由于以下原因:
1. 没有在 Spring Boot 项目中引入 javax.validation 依赖。在 pom.xml 文件中添加以下依赖即可:
```
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
```
2. 没有在 Spring Boot 项目中启用校验功能。可以在 application.yml 或 application.properties 文件中添加以下配置:
```
spring:
mvc:
# 启用校验功能
validation:
# 快速失败模式
fail-fast: true
```
3. 没有在校验对象属性上添加 @NotNull、@NotBlank 等校验注解。例如,在上面的示例中,必须在 User 类的用户名和密码属性上添加 @NotNull、@NotBlank 注解才能生效。
如果以上三点都没有问题,仍然无法生效,可以检查是否在校验分组接口上添加了 @Default 注解。如果添加了该注解,就会使用默认分组进行校验,而忽略自定义的分组。
另外,如果需要在 JAX-RS RESTful 服务接口中分组校验嵌套对象或集合类型的属性,可以使用 @Valid 注解。例如:
```
public class Address {
@NotBlank(message = "省不能为空")
private String province;
@NotBlank(message = "市不能为空")
private String city;
@NotBlank(message = "区不能为空")
private String district;
// 其他属性和方法省略
}
public class User {
@NotNull(message = "用户名不能为空", groups = {CreateUserGroup.class})
@NotBlank(message = "用户名不能为空格", groups = {CreateUserGroup.class})
private String username;
@NotNull(message = "密码不能为空", groups = {CreateUserGroup.class})
@NotBlank(message = "密码不能为空格", groups = {CreateUserGroup.class})
private String password;
@Valid
private Address address;
@Valid
private List<Address> addressList;
// 其他属性和方法省略
}
@Path("/users")
public class UserResource {
@POST
@Path("/")
public Response createUser(@Validated(CreateUserGroup.class) User user) {
// 处理创建用户账号的业务逻辑
}
}
```
上述代码中,@Valid 注解用于校验 User 对象中的 Address 对象和 addressList 属性。
阅读全文