# 主数据接口相关问题排查指南
# 排查指南详细说明
通用前置检查:
- 确认版本:MDM 7.3.0
- 确认服务状态:MDM后端服务、AFCenter服务是否正常运行
- 检查网络连通性:调用方与被调用方(MDM、ESB)网络是否互通
- 查看接口文档:通过管理门户“服务管理”或Swagger地址(
/swagger-ui.html?urls.primaryName=mdm)查看接口定义 - 查阅补丁列表:主数据7.3补丁列表 (opens new window)
# 场景一:OpenAPI接口调用异常
问题现象:
- 接口调用返回404、405等HTTP状态码错误
- 接口返回空指针、数据不存在等业务异常
- 新增/更新接口调用后,数据未正确保存或部分字段丢失
- 主子表接口调用时,子表数据丢失、主键冲突或报错
- 接口调用超时或性能缓慢
- 编码规则在接口调用时未生效
排查步骤:
第一步:排除产品BUG
- 操作:在MDM官方补丁列表中搜索关键词
接口、API、调用、OpenAPI - 相关补丁:
MDM_7.3_ALL_20251119_P1(修复根据系统主键发布业务数据接口报错)MDM_7.3_SERVER_20251103_P1(增强新增接口对默认值的支持)MDM_7.3_SERVER_20250925_P2(修复主子模型接口调用子模型找不到key问题)MDM_7.3_SERVER_20250928_P2(修复主子模型导入空指针,需重新下载模板)MDM_7.3_SERVER_20250930_P1(批量新增接口支持)MDM_7.3_SERVER_20251015_P1(修复编码规则在新增并生效接口中未生成问题)MDM_7.3_SERVER_20260202_P1(JPA事务优化及数据库连接池断开问题)
- 解决方案:若找到描述匹配的补丁,则申请并应用
- 操作:在MDM官方补丁列表中搜索关键词
第二步:根据问题现象排查
现象:接口404/405错误
- 排查项:请求URL、HTTP方法是否与接口文档一致
- 排查项:URL路径中的
{dataModelCode}是否替换为实际的模型编码(注意大小写) - 排查项:API版本路径(如
/api/mdm/openapi/)是否正确 - 解决方案:
- 根据接口文档修正请求URL和方法
- 确认模型编码与系统中定义的完全一致
现象:接口返回业务异常(空指针、数据不存在)
- 排查项:请求参数中是否包含必要的业务主键或M_ID
- 排查项:对于更新操作,要更新的数据是否存在
- 排查项:请求体中字段名称是否与模型字段编码完全一致
- 解决方案:
- 确保请求参数完整且正确
- 对于主子表更新,需传入子表数据的M_ID
- 申请补丁解决已知接口问题
现象:主子表接口调用异常
- 排查项:请求体中主子表数据的JSON嵌套结构是否正确
- 排查项:子表数据中是否包含必要的关联字段
- 排查项:
- 新增操作:子表数据的主键(M_ID)是否重复,或由系统自动生成
- 更新操作:是否传入了子表数据的M_ID
- 解决方案:
- 参考接口文档中主子表请求示例调整报文结构
- 新增时:确保子表主键唯一,或由系统自动生成
- 更新时:需传入子表数据的M_ID,否则会覆盖或新增子表数据
- 申请补丁:
MDM_7.3_SERVER_20250925_P2(修复子模型找不到key问题)MDM_7.3_SERVER_20250928_P2(修复主子模型导入空指针)
现象:编码规则未生效
- 排查项:模型中是否已配置编码方案并发布
- 排查项:调用的是新增接口还是新增并生效接口
- 解决方案:
- 确保编码方案已配置并发布
- 申请补丁
MDM_7.3_SERVER_20251015_P1
现象:接口调用超时
- 排查项:单次请求的数据量是否过大(如批量新增大量数据)
- 排查项:数据库性能是否存在瓶颈
- 解决方案:
- 减少单次请求的数据量,分批处理
- 检查数据库连接池配置和性能
- 申请补丁
MDM_7.3_SERVER_20260202_P1
# 场景二:服务注册/ESB集成异常
问题现象:
- 服务注册到ESB失败,或注册后状态显示不正确
- 注册的服务在ESB平台无法调用
- 通过ESB调用MDM接口时报错
- 服务取消注册失败
排查步骤:
第一步:排除产品BUG
- 操作:搜索关键词
注册、ESB、服务 - 相关补丁:
MDM_7.3_SERVER_20251204_P2(优化注册服务提示,单条接口注册前需先执行全量注册)
- 解决方案:若找到描述匹配的补丁,则申请并应用
- 操作:搜索关键词
第二步:根据问题现象排查
现象:服务注册失败
- 排查项:
application-mdm.properties中ESB相关配置是否正确# ESB9.0/iPaaS 9.1.0版本需设置为true mdm.esb.support.afc=true - 排查项:在ESB平台上是否已提前注册好相关的域、系统、通道信息
- 排查项:注册时选择的域、系统、通道是否与ESB平台一致
- 解决方案:
- 修正配置文件后重启服务
- 先在ESB平台完成域、系统、通道的注册,再执行MDM服务注册操作
- 先执行一次全量注册,再进行单条接口注册
- 排查项:
现象:注册后服务无法调用
- 排查项:在ESB平台检查服务的发布状态
- 排查项:ESB平台的路由配置是否正确
- 解决方案:
- 在ESB平台手动发布服务
- 检查ESB路由规则,确保请求能正确转发到MDM后端
现象:服务取消注册失败
- 排查项:是否有正在运行的流程或依赖该服务
- 解决方案:在ESB平台手动删除服务注册信息
# 场景三:客户端/服务授权异常
问题现象:
- 接口调用返回401 Unauthorized或403 Forbidden
- 新增客户端后,调用接口提示凭证无效
- 客户端有权限,但调用某些接口时提示无权限
- 更换访问凭证后,旧凭证仍然可用
排查步骤:
第一步:排除产品BUG
- 操作:搜索关键词
客户端、授权、凭证 - 相关补丁:
MDM_7.3_UI_20260302_P2(修复服务授权编辑时模型名不显示中文)MDM_7.3_UI_20251117_P1(优化数据授权页面,修复子模型字段选择问题)
- 解决方案:若找到描述匹配的补丁,则申请并应用
- 操作:搜索关键词
第二步:根据问题现象排查
现象:接口返回401/403
- 排查项:请求头中是否包含正确的客户端凭证
# 方式一:专用请求头 x-mdm-client-code: {CLIENT_CODE} x-mdm-client-secret: {CLIENT_SECRET} # 方式二:Basic认证 Authorization: Basic {BASE64(CLIENT_CODE:CLIENT_SECRET)} - 排查项:客户端凭证未过期,且状态为“启用”
- 排查项:在“服务授权”中,该客户端是否已授权给目标模型
- 解决方案:
- 修正请求头中的凭证信息
- 在客户端管理中重新生成凭证或启用客户端
- 在“服务授权”中为客户端配置模型权限
- 排查项:请求头中是否包含正确的客户端凭证
现象:部分接口无权限
- 排查项:在“服务授权”中,该模型的“OpenAPI服务权限”是否勾选了所有需要调用的接口
- 解决方案:在服务授权中,勾选对应的API权限后保存
现象:更换凭证后旧凭证仍可用
- 排查项:更换凭证时,是否设置了“新凭证失效时刻”
- 解决方案:更换凭证时,选择旧凭证立即失效
# 场景四:接口报文/加密异常
问题现象:
- 接口调用返回报文解析失败
- 启用加密传输后,客户端无法解密响应数据
- 启用GZIP压缩后,数据解压失败
- 请求报文中的特殊字符导致解析错误
排查步骤:
第一步:排除产品BUG
- 操作:搜索关键词
报文、加密、解密、压缩 - 相关补丁:
MDM_7.3_SERVER_20251229_P1(优化between查询容错机制)MDM_7.3_SERVER_20260127_P1(修复非http方式调用时空指针问题)MDM_7.3_ALL_20251120_P1(限制输入和导入带有英文“/”)
- 解决方案:若找到描述匹配的补丁,则申请并应用
- 操作:搜索关键词
第二步:根据问题现象排查
现象:加密传输解密失败
- 排查项:客户端配置的密钥与MDM中配置的密钥是否一致
- 排查项:解密时使用的密钥类型是否正确(公钥/私钥)
- 排查项:如果启用了GZIP压缩,解压和解密的顺序是否正确(先解压后解密)
- 解决方案:
- 在客户端管理中重新生成密钥对,确保私钥已保存
- 参考RSA加解密工具类示例调整解密代码
- 如需申请加密相关的jar包:通过AME+发起工单
现象:报文中的特殊字符导致解析错误
- 排查项:字典项或字段值中是否包含“/”、“&”等特殊字符
- 解决方案:申请补丁
MDM_7.3_ALL_20251120_P1
现象:响应报文格式与预期不符
- 排查项:请求头中的
Accept字段是否设置正确Accept: application/json # 明文响应 Accept: application/octet-stream # 密文响应 - 解决方案:根据需求设置正确的Accept头
- 排查项:请求头中的
# 场景五:统一服务代理(扩展)接口异常
问题现象:
- 调用代理接口时,提示“action”参数错误或无效
- 通过代理接口调用时,参数传递方式不正确导致失败
- 代理接口返回的结果与直接调用接口不一致
- 请求体中的查询条件未生效
排查步骤:
第一步:排除产品BUG
- 操作:搜索关键词
代理、action、统一接口 - 相关补丁:目前无直接相关补丁
- 解决方案:如确认是产品缺陷,通过AME+发起工单反馈
- 操作:搜索关键词
第二步:确认接口调用方式
API-27 (GET方式):适用于无请求体的调用,所有参数通过URL传递
GET /api/mdm/openapi?action=2&dataModelCode=school_student&pageIndex=0&pageSize=10action=2:表示调用查询接口(接口编号可通过服务列表查看)- 原接口路径上的参数(如
dataModelCode)改为查询参数传递
API-28 (POST方式):适用于有请求体的调用,查询条件放在请求体中
POST /api/mdm/openapi?action=2&dataModelCode=school_student&pageIndex=0&pageSize=10 Content-Type: application/json { "args": [ {"name": "gender", "matchValue": "M"}, {"name": "name", "matchType": "starts_with", "matchValue": "上官"} ] }- 查询条件通过
args数组传递 - 每个条件包含
name(字段名)、matchType(匹配类型)、matchValue(匹配值)
- 查询条件通过
第三步:根据问题现象排查
现象:action参数错误
- 排查项:
action参数值是否为有效的接口编号 - 排查项:可通过“服务管理”页面或Swagger文档查看各接口对应的编号
- 解决方案:使用正确的接口编号,常见接口编号:
action=2:查询接口action=3:新增接口action=4:更新接口action=12:根据业务主键更新并生效接口
- 排查项:
现象:参数传递错误
- 排查项:原接口路径上的参数(如
dataModelCode、id等)是否已改为URL查询参数传递 - 排查项:对于GET方式调用,所有参数必须放在URL中
- 解决方案:
- 将所有路径参数改为查询参数,放在URL中传递
- 例如:原接口
/api/mdm/openapi/school_student/query改为?action=2&dataModelCode=school_student
- 排查项:原接口路径上的参数(如
现象:查询条件未生效
- 排查项:对于POST方式调用,请求体中的
args数组格式是否正确 - 排查项:每个查询条件的
name、matchType、matchValue字段填写是否正确 - 排查项:
matchType支持的取值:eq:等于like:模糊匹配gt:大于lt:小于starts_with:以...开头ends_with:以...结尾
- 解决方案:
- 参考接口文档中的查询条件格式调整请求体
- 确保
matchType使用正确的枚举值
- 排查项:对于POST方式调用,请求体中的