Azure Form Recognizer Java SDK getValueDate()返回null问题
问题描述
通过Form Recognizer Studio构建自定义神经模型,标注训练环节已完成日期字段标注。使用com.azure:azure-ai-formrecognizer:4.0.0-beta.5版本Java SDK提取日期精确值时出现异常:
Form Recognizer Studio中预览的返回JSON如下:
"Start Date": { "type": "date", "content": "01.05.2022", "boundingRegions": [ { "pageNumber": 1, "polygon": [1.6025,4.0802,2.148,4.0802,2.148,4.1613,1.6025,4.1613] } ], "confidence": 0.981, "spans": [ { "offset": 910, "length": 10 } ] }
返回结果里Start Date字段类型标记为date,content值为01.05.2022,置信度0.981,但调用SDK的getValueDate()方法返回null,只有调用getContent()能拿到正确的字符串值。
问题原因
这是4.0.0-beta.5版本SDK的固有缺陷:
- 该测试版本仅支持解析ISO 8601格式(
yyyy-MM-dd)的日期值,对自定义神经模型返回的点分隔dd.MM.yyyy这类非标准格式日期没有做适配解析,无法将原始字符串自动转换为日期类型,因此getValueDate()直接返回null。 - Studio端展示的
type: date只是服务端识别到字段的语义类型为日期,不代表接口返回了可直接被SDK反序列化为日期对象的标准化值。
解决方法
- 临时适配:直接通过
getContent()拿到日期字符串,自行按对应格式解析,参考代码:
// 按实际返回的日期格式指定解析规则 DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("dd.MM.yyyy"); LocalDate startDate = LocalDate.parse(formField.getContent(), dateFormatter);
如果业务场景中存在多种日期格式,可以配置多组格式化器做轮询匹配,避免单格式解析失败。
- 长期修复:将SDK升级到4.0.0正式及以上版本,正式版已经补全了自定义模型下多格式日期字段的解析逻辑,升级后可直接调用
getValueDate()获取正确的LocalDate类型结果,不需要额外做字符串转换。
内容的提问来源于stack exchange,提问作者Dumitru P.
相关产品推荐
相关产品推荐

