You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Synapse Web Activity丢失datetime时区Z后缀致API请求400错误

解决Azure Synapse Web Activity传递含UTC时间JSON时丢失Z后缀的问题

问题场景

在Azure Synapse中通过Web Activity向Azure Spring Apps的API发送POST请求,请求体取自前置查询返回的JSON数据:

  • 使用表达式@variables('currentBatch')设置请求体时,接口返回400错误
  • 直接写入请求体文本时请求正常
  • 错误日志显示transactionDTime字段的UTC时区后缀Z被移除,导致后端无法将字符串反序列化为java.time.OffsetDateTime类型
  • Lookup Activity和Set CurrentBatch Activity的输出中,时间格式均带有正确的Z后缀

原因分析

Azure Synapse在将变量中的JSON对象序列化为请求体时,会自动对日期时间类型字段进行格式转换,移除UTC后缀Z;而直接传入文本时属于纯字符串传递,不会触发该自动转换逻辑。

可行解决方案

1. 强制将变量转为JSON字符串传递

在Web Activity的请求体中使用如下表达式,跳过Synapse的自动格式转换:

@string(variables('currentBatch'))

此方式会保留原始JSON中的Z后缀,确保后端能正确解析时间字段。

2. 手动格式化时间字段

在Set Variable Activity中,对transactionDTime字段手动拼接Z后缀,将其转为字符串类型,示例表达式:

{
  "transactionDTime": "@concat(activity('LookupActivity').output.firstRow.transactionDTime, 'Z')",
  // 其他字段按原有逻辑配置
}

确保时间字段以带Z的字符串形式存入变量,避免后续被自动转换。

3. 调整后端API的反序列化配置(若有权限)

修改Azure Spring Apps中API的Jackson序列化配置,允许解析不带Z后缀的UTC时间字符串,比如添加如下配置:

ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JavaTimeModule());
mapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"));

或者自定义时间格式转换器,兼容带/不带Z后缀的UTC时间字符串。

内容的提问来源于stack exchange,提问作者Ricker Silva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 09:06:01