如何让DTO接受空字符串字段且仅在非空时应用JPA校验?
解决方案:无需自定义校验器,DTO内部即可实现
可以直接通过JSR-380标准的@Pattern注解实现需求,不用编写自定义校验逻辑。核心思路是用正则表达式同时匹配空字符串和符合长度要求的非空字符串。
修改后的DTO代码
@Data public class AdminUpdateUserDto { // 空字符串直接通过校验,非空时必须满足6-20字符长度 @Pattern(regexp = "^$|.{6,20}", message = "用户名非空时长度需在6-20之间") private String username; @Email @Length(min = 5, max = 30) private String email; @Length(min = 6, max = 20) private String password; }
原理说明
正则表达式^$|.{6,20}的含义:
^$:匹配空字符串,此时不触发长度校验|:逻辑“或”,表示两种情况任意一种都合法.{6,20}:匹配任意6到20个字符的非空字符串,此时会强制校验长度
这样当请求传入username: ""时,校验直接通过;如果传入非空字符串,就会自动检查是否符合6-20的长度要求。
内容的提问来源于stack exchange,提问作者Mats
相关产品推荐
相关产品推荐

