开发经验总结

一、validation的使用

引入依赖

java 复制代码
<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>

采用注解校验

实体类的字段采用相关注解修饰,如@NotNull,@Null

java 复制代码
@NotBlank
private String name;

在controller使用@Valid修饰该实体类

分组校验

(1)定义一个标识接口

java 复制代码
public interface Add {}

(2)在校验注解指定分组

java 复制代码
@Null(groups = Add.class)

(3)使用Validated修饰实体类

java 复制代码
@Validated(Add.class)

注意:当使用分组校验时,修饰字段的注解都要加分组,否则其他字段校验不生效,它只会在Validated修饰

自定义校验注解

(1)编写一个自定义注解

java 复制代码
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Constraint(
        validatedBy = {ShowConstraintValidator.class}//可以指定多个校验器
)
public @interface Show {
    //默认消息提示,需要在resources目录下新增ValidationMessages.properties配置
    String message() default "{com.mall.common.valid.Show.message}";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};

    int[] vals() default {};

}

(2)在自定义一个校验器

java 复制代码
public class ShowConstraintValidator implements ConstraintValidator<Show,Integer> {
    @Override
    public void initialize(Show constraintAnnotation) {
       //初始化参数
    }

    @Override
    public boolean isValid(Integer integer, ConstraintValidatorContext constraintValidatorContext) {
        //todo 校验逻辑判断
        return true;
    }
}

(3)在resources目录增加一个配置文件ValidationMessages.properties

java 复制代码
com.mall.common.valid.Show.message=test
相关推荐
云和数据.ChenGuang9 小时前
langchain4j InMemoryEmbeddingStore常用的方法
java·人工智能·windows·java-ee·fastapi·springai
爱勇宝9 小时前
裁员裁掉了那个干了14年的人:我这才看清职场的5条潜规则
前端·后端·程序员
雪雪爱冲浪9 小时前
ISP代理与住宅代理选型对比:从原理到实战
服务器·网络·网络协议·tcp/ip·接口隔离原则
Hilaku9 小时前
GraphQL 在国内为什么水土不服?
前端·javascript·程序员
智能直播9 小时前
OpenGL驱动的实时绿幕抠图:GPU着色器色度键控原理
运维·服务器
小番茄程序猿9 小时前
RAG 的 precision 只有 0.55,我以为检索烂了,MRR 一测才发现是我用错了尺子
java·后端
天空鸟_时光不老9 小时前
07-检查点与状态持久化
java·人工智能·spring boot·spring·spring cloud·kafka·maven
Latchh9 小时前
PDF打开不要密码却显示已加密,前端怎么判断
前端·图像处理·人工智能·计算机视觉·pdf
秋天的一阵风9 小时前
🧐 为什么大厂 RAG 从不用纯向量检索?
前端·面试·ai编程
GoodStudyAndDayDayUp9 小时前
一个简单的java jar跑docker
java·docker·jar