【问题标题】:"dd/MM/yyyy" format not validating YEAR in Spring boot\"dd/MM/yyyy\" 格式在 Spring Boot 中不验证 YEAR
【发布时间】:2022-11-01 14:43:46
【问题描述】:

我尝试在 Spring Boot 中使用自定义验证来验证日期。但是唯一的yyyy 没有验证年份,尽管ddMM 工作正常。

例如,

如果在 RequestBody 我将日期格式传递为

02/1k/2022,已正确验证,k2/12/2022 已正确验证,但 当我通过像02/12/2k22 这样的日期时,没有经过验证。

我想不通。

春季启动版本:2.3.0.发布

依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

代码:

public class IsValidDateFormatValidator implements ConstraintValidator<IsValidDateFormat, String> {

    @Override
    public void initialize(IsValidDateFormat arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public boolean isValid(String arg0, ConstraintValidatorContext arg1) {

        if (arg0 != null) {
            if (arg0.trim().length() > 10) {
                return false;
            }
            if (!arg0.isEmpty()) {
                SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
                sdf.setLenient(false);
                try {
                    sdf.parse(arg0);
                } catch (ParseException e) {
                    return false;
                }
            }
        }
        return true;

    }
}
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = {IsValidDateFormatValidator.class})
@Documented
public @interface IsValidDateFormat {

    String message() default "";

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

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

}

模型:

@NotEmpty(message = "dob {emptyDateValidationMsg}")
@IsValidDateFormat(message = "dob {dateFormatValidationMsg}")
@JsonProperty("dob")
private String dob;

请指出我犯了什么错误...

如果我通过 dateformat,相同的代码正在正确验证年份yyyy-MM-dd代替日/月/年

【问题讨论】:

    标签: java spring-boot customvalidator


    【解决方案1】:

    如果您使用 SimpleDateFormat.parse,则存在一些缺陷,即“该方法可能不会使用给定字符串的整个文本"。你可以在 javadoc DateFormat 中找到它

    我建议您可以改用 DateTimeFormatter 和 LocalDate.parse 。

        try {
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
            LocalDate.parse(arg0, formatter);
        } catch (DateTimeParseException e) {
            return false;
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-18
      • 2022-11-29
      • 2017-04-07
      • 1970-01-01
      • 2016-01-26
      • 2015-02-07
      • 1970-01-01
      相关资源
      最近更新 更多