如何在Talend的tSOAP消息中传递yyyy-MM-dd格式的Date类型值
问题解决:Talend中tSOAP传递日期格式异常处理
问题根源
你将Date类型变量直接拼接进SOAP XML时,Java会自动调用Date.toString()方法,输出Wed Sep 06 00:00:00 CEST 2023这类带时区的默认格式,不符合SOAP要求的yyyy-MM-dd格式。
解决方案
方案1:直接使用已有的字符串全局变量
你已经将正确格式的日期字符串存在全局变量str_date_last_update中,直接拼接即可:
"<soap:Envelope ... <!--- type date with restriction pattern([0-9]{4}-[0-9]{2}-[0-9]{2}):--> <LowerBoundaryDate>" + (String)globalMap.get("str_date_last_update") + "</LowerBoundaryDate> <UpperBoundaryDate>2023-09-06</UpperBoundaryDate> </SelectionByChangedSinceDate> .... </soap:Envelope>"
方案2:将Date对象格式化为指定字符串
如果必须基于Date类型变量处理,使用TalendDate.formatDate()方法将其转换为yyyy-MM-dd格式的字符串:
"<soap:Envelope ... <!--- type date with restriction pattern([0-9]{4}-[0-9]{2}-[0-9]{2}):--> <LowerBoundaryDate>" + TalendDate.formatDate("yyyy-MM-dd", (Date)globalMap.get("dat_date_last_update")) + "</LowerBoundaryDate> <UpperBoundaryDate>2023-09-06</UpperBoundaryDate> </SelectionByChangedSinceDate> .... </soap:Envelope>"
失败原因说明
你之前尝试用TalendDate.parseDate()将字符串转成Date对象再拼接,本质还是把Date对象直接拼入XML,依然会触发默认的toString()方法,导致格式不符合要求。parseDate是字符串转Date对象的方法,而formatDate才是将Date对象转为指定格式字符串的正确方法。
内容的提问来源于stack exchange,提问作者Ha Anh Nguyen
相关产品推荐
相关产品推荐

