如何在 Spring Boot 中以“MM/dd/yyyy”格式验证日期?

Sar*_*nan 7 java spring spring-annotations spring-boot

我需要验证给定的日期是否具有有效的月份、日期和年份。基本上,日期格式将是“MM/dd/yyyy”。但是日期像“13/40/2018”那么我需要抛出一个错误消息,比如“无效的开始日期”。春季是否有任何注释可以完成这项工作?

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

veb*_*ben 6

你可以使用类似的东西:

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

但我不知道它是否可以与课堂一起使用Date

  • 在这种情况下,如何显示无效日期的自定义错误消息..? (2认同)

has*_*nae 4

您可以使用自定义解串器:

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
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

并使用如下:

@JsonDeserialize(using = DateDeSerializer .class)
 private Date startDate;
Run Code Online (Sandbox Code Playgroud)