介绍
通常我们在开发的过程中,需要对前端传入的数据进行校验,尽管这一步已经在前端进行了一次校验,虽然现在已经有了很多校验的注解,@NotNull、@NotBlank、@URL等一系列注解帮助我们进行校验,但是在实际的业务开发过程中,这些可能不足以满足我们的需求,这时候我们就需要自己来定义注解了。
示例DEMO
| @Target({TYPE, ANNOTATION_TYPE, FIELD}) |
| @Retention(RetentionPolicy.RUNTIME) |
| @Constraint(validatedBy = {StringValidator.class}) |
| public @interface NotBlank { |
| |
| boolean required() default true; |
| |
| String message() default Messages.CK_NOT_BLANK_DEFAULT; |
| |
| String value() default ""; |
| |
| Class<?>[] groups() default {}; |
| |
| Class<? extends Payload>[] payload() default {}; |
| } |
| public class StringValidator implements ConstraintValidator<NotBlank, String> { |
| @Override |
| public void initialize(NotBlank constraintAnnotation) { |
| |
| } |
| |
| @Override |
| public boolean isValid(String value, ConstraintValidatorContext context) { |
| if (value == null || StringUtils.isBlank(value) || StringUtils.isEmpty(value.trim())) { |
| return false; |
| } |
| return true; |
| } |
| } |
| |
| |
| |
| |
| public interface GetList { |
| } |
| |
| |
| |
| |
| public interface Insert { |
| } |
| |
| public interface Update { |
| } |
| |
| |
| |
| |
| |
| public interface Default { |
| } |
| @Data |
| public class BlogVO { |
| |
| |
| |
| |
| @NotBlank(groups = {Insert.class, Update.class, Default.class}) |
| private String title; |
| } |

总结
- 使用该注解的时候,需要注意自定义规范,即demo中的StringValidator;
- 是结合@Validated一起使用的,例如例子中的添加博客方法,使用了Insert.class,因为针对title字段,只有标准了Insert.class, Update.class, Default.class,其中之一才会进行非空校验,而Intert.class在其中,所以需要进行非空校验,主要就是执行StringValidator.isValid()该逻辑,如果返回true,则不为空,返回false,则为空;同时空的提示就是Messages.CK_NOT_BLANK_DEFAULT,这是自定义的提示信息;
参考博客
使用@CONSTRAINT配合自定义注解开发
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!