在进行业务分析时发现当前业务所有的属性都应当有值,因此在设置数据库中的表结构时,也设置了所有属性都是必填。属性又比较多,如果通过一个个的if判断会显得代码比较多,因此考虑到使用注解进行校验属性是否为空。
常见属性上的校验注解
- @NotNull:用于检查字段是否为null。
- @NotEmpty:用于检查字符串是否为空(长度为0)。
- @NotBlank:用于检查字符串是否为空或只包含空白字符。
- @Null:用于检查字段是否为null。
- @Size:用于检查字符串、集合或数组的长度是否在指定范围内。
- @Min 和 @Max:用于检查数字类型的字段是否在指定的范围内。
- @Pattern:用于检查字符串是否匹配正则表达式。
@NotNull和@Min
@NotNull(message = "商品数量不能为空")
@Min(value = 1, message = "商品数量不能小于1")
private Integer cartNum;
@NotEmpty
@NotEmpty(message = "账号不能为空")
@Length(max = 32, message = "账号长度不能超过32个字符")
private String account;
@NotBlank
@NotBlank(message = "营业执照或机构代码证不能为空")private String license;
@Size
@NotEmpty(message = "users 至少要有一组数据")@Size(min = 1, message = "users 至少要有一组数据")private List<UserRequest> users;
@Pattern
@ApiModelProperty(value = "密码", required = true)@Pattern(regexp = "^(?![\\da-z]+$)(?![\\dA-Z]+$)(?![\\d~!@#$%^_]+$)(?![a-zA-Z]+$)(?![a-z~!@#$%^_]+$)(?![A-Z~!@#$%^_]+$)[\\da-zA-z~!@#$%^_]{6,18}$", message = "密码格式错误,密码必须以字母开头,长度在6~18之间,只能包含字符、数字和下划线")private String password;
@Min 和 @Max
@ApiModelProperty(value = "请填写服务评分")@Min(value = 0)@Max(value = 5)private Double serviceScore;
注意以上注解需要在控制层的参数前添加@Valid或@Validated注解。用于标记Controller中的方法参数,表示需要对该参数进行校验。
import javax.validation.Valid;@Controller
public class UserController {@PostMapping("/users")public String createUser(@Valid @RequestBody User user, BindingResult bindingResult) {if (bindingResult.hasErrors()) {// 处理校验失败的情况return "error";}// 创建用户return "success";}
}
注解避免了重复的使用if判断,简化了代码编写。