как проверить дату в формате ММ / ДД / ГГГГ, действителен месяц, дата, год в весеннем загрузке - PullRequest
0 голосов
/ 29 ноября 2018

Мне нужно подтвердить, что указанная дата имеет действительный месяц, дату и год.По сути, формат даты будет "ММ / ДД / ГГГГ".Но дата идет как «13/40/2018», тогда мне нужно выдать сообщение об ошибке, например «неверная дата начала».Есть ли какая-нибудь аннотация, доступная весной, чтобы сделать это?

@NotNull(message = ExceptionConstants.INVALID_START_DATE)
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "MM/dd/yyyy")
private Date startDate;

Ответы [ 3 ]

0 голосов
/ 29 ноября 2018

Вы можете использовать что-то подобное:

@DateTimeFormat(iso = DateTimeFormat.ISO.DATE)
@JsonFormat(pattern = "MM/dd/yyyy")
private LocalDate startDate;

Но я не знаю, может ли это работать с классом Date

0 голосов
/ 29 ноября 2018
@CustomDateValidator
private LocalDate startDate;

@Documented
@Constraint(validatedBy = CustomDateValidator.class)
@Target( { ElementType.METHOD, ElementType.FIELD })
@Retention(RetentionPolicy.RUNTIME)
public @interface CustomDateConstraint {
    String message() default "Invalid date format";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}

public class CustomDateValidator implements
  ConstraintValidator<CustomDateConstraint, LocalDate> {

    private static final String DATE_PATTERN = "MM/dd/yyyy";

    @Override
    public void initialize(CustomDateConstraint customDate) {
    }

    @Override
    public boolean isValid(LocalDate customDateField,
      ConstraintValidatorContext cxt) {
          SimpleDateFormat sdf = new SimpleDateFormat(DATE_PATTERN);
           try
        {
            sdf.setLenient(false);
            Date d = sdf.parse(customDateField);
            return true;
        }
        catch (ParseException e)
        {
            return false;
        }
    }

}
0 голосов
/ 29 ноября 2018

Вы можете использовать пользовательский десериализатор:

public class DateDeSerializer extends StdDeserializer<Date> {

    public DateDeSerializer() {
        super(Date.class);
    }

    @Override
    public Date deserialize(JsonParser p, DeserializationContext ctxt)
        throws IOException, JsonProcessingException {
        String value = p.readValueAs(String.class);
        try {
            return new SimpleDateFormat("MM/dd/yyyy").parse(value);
        } catch (DateTimeParseException e) {
            //throw an error
        }
    }

}

и использовать как:

@JsonDeserialize(using = DateDeSerializer .class)
 private Date startDate;
...