SpringBoot自定义校验注解校验日期时间格式字符串

该博客介绍了如何在Java中自定义注解`DateTimeStr`进行日期时间字符串的格式校验,包括注解的定义、校验类的实现以及在实体类和Controller层的使用。通过注解`@DateTimeStr`,可以确保输入的日期时间字符串符合指定的格式,如'yyyy-MM-dd HH:mm:ss'。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 先定义一个注解
@Target({ElementType.FIELD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = DateTimeStrValidator.class)
public @interface DateTimeStr {
 
    String message() default "format incorrect";
 
    String format() default "yyyy-MM-dd HH:mm:ss";
 
    Class<?>[] groups() default {};
 
    Class<? extends Payload>[] payload() default {};
}
  1. 编写校验类
package com.aerosatlink.serviceagent.config;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.text.SimpleDateFormat;

/**
 * 日期时间字符串校验器
 *
 * @author 杨君屹
 * @date 2021/08/05
 */
public class DateTimeStrValidator implements ConstraintValidator<DateTimeStr, String> {
    
    private DateTimeStr dateTimeStr;

    @Override
    public void initialize(DateTimeStr dateTimeStr) {
        this.dateTimeStr = dateTimeStr;
    }

    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        // 如果 value 为空则不进行格式验证,为空验证可以使用 @NotBlank @NotNull @NotEmpty 等注解来进行控制,职责分离
        if (value == null) {
            return true;
        }
        String format = dateTimeStr.format();

        if (value.length() != format.length()) {
            return false;
        }

        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);

        try {
            simpleDateFormat.parse(value);
        } catch (Exception e){
            return false;
        }
        return true;
    }
}

  1. 在实体类上使用注解
    @DateTimeStr(message = "sessionBegin not satisfied with format yyyy-MM-dd HH:mm:ss ")
    private String sessionBegin;
  1. 在controller层接口位置使用@Valid注解,开启校验
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值