为了账号安全,请及时绑定邮箱和手机立即绑定

验证 Java LocalDate 是否匹配 yyyy-MM-dd 格式和可读消息

验证 Java LocalDate 是否匹配 yyyy-MM-dd 格式和可读消息

繁花不似锦 2023-05-17 14:30:30
我在 DoB 的 POJO 类中有以下属性。@NotNull(message = "dateOfBirth is required")@JsonDeserialize(using = LocalDateDeserializer.class)LocalDate dateOfBirth;我该如何验证用户正在发送有效的日期格式(仅接受 YYYY-MM-DD)如果用户输入的日期不正确,我想发送自定义消息或更具可读性的消息。目前,如果用户输入无效日期,则应用程序会发送以下长错误 -JSON parse error: Cannot deserialize value of type `java.time.LocalDate` from String \"1984-33-12\": Failed to deserialize java.time.LocalDate:(java.time.format.DateTimeParseException) Text '1984-33-12' could not be parsed: Invalid value for MonthOfYear (valid values 1 - 12): 33; ...
查看完整描述

3 回答

?
MMTTMM

TA贡献1869条经验 获得超4个赞

您可以使用此注释:

@JsonFormat(pattern = "YYYY-MM-DD")

您可以在此处进一步阅读有关验证日期格式时自定义错误消息的信息: 自定义错误消息


查看完整回答
反对 回复 2023-05-17
?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

您应该创建自定义反序列化器,覆盖反序列化方法以抛出自定义错误并在@JsonDeserialize 中使用它


public class CustomDateDeserializer

        extends StdDeserializer<LocalDate> {


    private static DateTimeFormatter formatter

            = DateTimeFormatter.ofPattern("YYYY-MM-DD");


    public CustomDateDeserializer() {

        this(null);

    }


    public CustomDateDeserializer(Class<?> vc) {

        super(vc);

    }


    @Override

    public LocalDate deserialize(

            JsonParser jsonparser, DeserializationContext context)

            throws IOException {


        String date = jsonparser.getText();

        try {

            return LocalDate.parse(date, formatter);

        } catch (DateTimeParseException e) {

            throw new RuntimeException("Your custom exception");

        }

    }

}

用它:


@JsonDeserialize(using = CustomDateDeserializer.class)

LocalDate dateOfBirth;


查看完整回答
反对 回复 2023-05-17
?
POPMUISE

TA贡献1765条经验 获得超5个赞

像这样的东西。


@Column(name = "date_of_birth")

@DateTimeFormat(iso = DateTimeFormatter.ISO_LOCAL_DATE)

@JsonFormat(pattern = "YYYY-MM-dd")

private LocalDateTime dateOfBirth;

DateTimeFormatter Java 文档


https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html


查看完整回答
反对 回复 2023-05-17
  • 3 回答
  • 0 关注
  • 312 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信