开发经验总结

一、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
相关推荐
Asize10 分钟前
HTTP 明明无状态,登录态怎么就保住了——React + Zustand + JWT 鉴权全流程拆解
前端·javascript
(轻舟已过万重山)15 分钟前
D1 · 融合蓝图:Spring AI + 虚拟线程 + 服务网格——现代后端统一底座
java·人工智能·spring
两只羊ovo17 分钟前
MCP:AI 界的 USB-C,把模型和世界「插」起来
前端
funnycoffee12318 分钟前
Huawei USG firewall no-nat config for ipsec traffic
linux·服务器
Darling噜啦啦22 分钟前
JWT 登录鉴权全链路:从 Zustand 状态管理到 Axios 拦截器,彻底搞懂前端鉴权工程
前端
SamDeepThinking24 分钟前
警惕那些很长时间没有编写任何代码、却在设计系统的人
java·后端·架构
可涵不会debug24 分钟前
LangChain 示例选择器(Example selectors)完整基础概念解读
服务器·前端·数据库
Csvn25 分钟前
😱 React `<StrictMode>`:为什么 useEffect 被调用了两次?别慌,这是特性不是 bug
前端
莫得感情 o26 分钟前
并发 13 · 异步编排
java·并发
TizzyGoodhealth28 分钟前
从零到一搭建Spring‑AI原生Tool‑Calling AI Agent|架构对比+完整实战源码+踩坑实录
java·ai·知识库·rag·ai agent·spring ai