我嘗試在 Spring Boot 中使用自定義驗證來驗證日期。但唯一yyyy的不是驗證年份dd,而且MM作業正常。
例如,
如果在 RequestBody 我將日期格式傳遞為
02/1k/2022, 被正確驗證并且也k2/12/2022被正確驗證但是當我通過一個日期時02/12/2k22沒有驗證。
我想不通。
SpringBoot 版本:2.3.0.RELEASE
依賴:
<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而不是dd/MM/yyyy ,相同的代碼將正確驗證年份
uj5u.com熱心網友回復:
如果您使用 SimpleDateFormat.parse,則存在一些缺陷,即“該方法可能不會使用給定字串的整個文本”。您可以在 javadoc DateFormat中找到
我建議您可以改用 DateTimeFormatter 和 LocalDate.parse 。
try {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
LocalDate.parse(arg0, formatter);
} catch (DateTimeParseException e) {
return false;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/524816.html
標籤:爪哇弹簧靴自定义验证器
