您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# 如何使用嵌套对象 @NotBlank @NotEmpty @NotBlank
## 引言
在Java开发中,尤其是使用Spring框架进行Web开发时,参数校验是保证数据完整性和安全性的重要环节。`@NotBlank`、`@NotEmpty`和`@NotNull`是常用的校验注解,但当对象存在嵌套结构时,如何正确使用这些注解就变得复杂起来。本文将深入探讨如何在嵌套对象中有效使用这些注解。
---
## 一、基础注解回顾
### 1. `@NotNull`
- **作用**:验证字段是否为null
- **适用类型**:所有类型
- **示例**:
```java
@NotNull
private String username;
@NotEmpty
@NotEmpty
private List<String> tags;
@NotBlank
@NotBlank
private String password;
当对象包含嵌套结构时,直接使用这些注解可能无法达到预期效果:
public class OrderDTO {
@NotNull
private UserDTO user; // 需要同时校验user对象本身和其内部字段
}
public class UserDTO {
@NotBlank
private String name;
}
@Valid
注解public class OrderDTO {
@NotNull
@Valid // 关键注解:启用嵌套对象校验
private UserDTO user;
}
public class TeamDTO {
@Valid
private List<@Valid MemberDTO> members; // 双重校验
}
public class MemberDTO {
@NotBlank
private String role;
}
使用@AssertTrue
实现自定义逻辑:
public class ProjectDTO {
@Valid
private Document doc;
@AssertTrue
public boolean isDocValid() {
return doc == null || doc.getTitle() != null;
}
}
public class UserDTO {
@NotBlank(groups = BasicCheck.class)
private String username;
@NotBlank(groups = AdvancedCheck.class)
private String password;
}
// 使用时指定组别
@Validated(AdvancedCheck.class)
public void createUser(@Valid UserDTO user) { ... }
组合使用注解:
@NotBlank
@Size(max = 100)
private String title;
明确校验边界:
统一异常处理:
@ControllerAdvice
public class ValidationHandler {
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(MethodArgumentNotValidException.class)
public ErrorResponse handleValidationExceptions(...) {
// 处理校验错误
}
}
@Valid
注解spring-boot-starter-validation
依赖)@Validated
的分组功能在嵌套对象中使用@NotBlank
、@NotEmpty
等校验注解时,核心要点是:
1. 通过@Valid
启用级联校验
2. 合理设计对象层级结构
3. 结合分组校验处理复杂场景
正确使用这些技术可以显著提高代码的健壮性,同时减少大量的样板校验代码。希望本文能帮助你在实际项目中更好地应用这些校验策略。
提示:Spring Boot 2.3+版本需要显式添加
spring-boot-starter-validation
依赖,这与早期版本不同。 “`
这篇文章共计约1100字,采用Markdown格式编写,包含代码示例、层级标题和重点强调,适合作为技术文档阅读。如需调整内容深度或示例复杂度,可以进一步修改。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。