如何配置JSON Schema以支持接收java.util.Date类型对象
问题原因
校验失败的核心是两个问题:
- 当前JSON Schema中
format: date-time默认要求遵循RFC3339规范的时间字符串,和java.util.Date默认序列化输出的本地化可读时间格式不兼容 - 你贴出的原始JSON Schema存在语法错误:
definitions下的dateTime定义结束后缺少闭合的}
解决方案
方案1:调整JSON Schema兼容现有java.util.Date序列化格式
如果不需要遵循通用时间规范,直接去掉默认的format校验,换成匹配当前输出格式的正则校验即可,调整后的完整Schema如下:
{ "title": "details", "definitions": { "dateTime": { "type": "string", "pattern": "^[A-Z][a-z]{2} \\d{1,2}, \\d{4}, \\d{1,2}:\\d{2}:\\d{2} [AP]M$" } }, "properties" : { "createdAt": { "$ref": "#/definitions/dateTime" } } }
上述正则可以完美匹配报错中出现的Nov 30, 2021, 0:22:11 AM这类时间格式。
方案2(更推荐):不改Schema,调整Java序列化逻辑
如果希望遵循通用的RFC3339时间规范,避免后续跨系统调用出现兼容问题,不需要调整JSON Schema,只需要把java.util.Date的序列化格式改成你解析时用的yyyy-MM-dd'T'HH:mm:ss.SSS'Z'格式即可。
内容的提问来源于stack exchange,提问作者Logic
相关产品推荐
相关产品推荐

