JSON Unexpected Syntax error:日期解析编解码及SOAP请求日期校验报错咨询
问题根因说明
你收到的SOAP错误已明确问题:
Unmarshalling Error: cvc-datatype-valid.1.2.1: '' is not a valid value for 'date'.
这说明提交到接口的日期字段值为空字符串,不是你推测的无效JSON问题,排查方向先对齐到「为什么日期字段提交时为空」即可。
排查步骤
- 第一步:补全日期计算的合法性校验
你当前的日期计算逻辑没有做输入校验,如果date_to_selector.val()为空、或者格式不符合要求,new Date()会生成Invalid Date对象,后续格式化后就会得到空值或非法字符串。可以替换原日期计算逻辑为更稳妥的实现:
var date_to_selector = $(this).parent().find("input[name=date_to]"); var date_to = date_to_selector.val().trim(); // 校验输入是否为空或格式不符合YYYY-MM-DD if (!date_to || !/^\d{4}-\d{2}-\d{2}$/.test(date_to)) { console.error('输入日期非法:', date_to); return; } var last_night = new Date(date_to); // 校验日期对象是否生成成功 if (isNaN(last_night.getTime())) { console.error('日期转换失败:', date_to); return; } last_night.setDate(last_night.getDate() - 1); // 手动拼接YYYY-MM-DD,避免locale实现差异导致格式异常 var last_night_date = [ last_night.getFullYear(), String(last_night.getMonth() + 1).padStart(2, '0'), String(last_night.getDate()).padStart(2, '0') ].join('-'); console.log('计算完成的日期:', last_night_date);
- 第二步:校验请求赋值逻辑
在发送请求前打印完整请求体,排除参数名写错、日期值被后续代码覆盖、序列化逻辑异常的问题:
// 发送前打印完整请求参数,确认日期字段是否正确赋值 console.log('完整请求体:', JSON.stringify(requestParams)); // 单独校验日期字段合法性,替换为实际提交的字段名 if (!requestParams.target_date_field || !/^\d{4}-\d{2}-\d{2}$/.test(requestParams.target_date_field)) { console.error('请求中的日期字段非法:', requestParams.target_date_field); return; }
- 第三步:校验接口适配逻辑
如果前端打印的请求参数正常,检查后端适配逻辑:- SOAP接口需要提交XML格式的请求体,确认你没有用JSON格式提交,Content-Type是否为
text/xml - 确认日期字段放在XML的正确节点下,没有被转义或者遗漏
- SOAP接口需要提交XML格式的请求体,确认你没有用JSON格式提交,Content-Type是否为
常见解决方案
- 偶现报错:就是输入日期为空或格式非法导致,补全第一步的校验逻辑即可
- 必现报错:大概率是参数名不匹配、请求格式不符合SOAP接口要求,对齐接口文档调整请求结构即可
内容的提问来源于stack exchange,提问作者user15123815
相关产品推荐
相关产品推荐

