当前位置: 首页 > news >正文

Dify中自定义工具类的类型

在dify的自定义工具类中定义了如下的json schema格式:

{"openapi": "3.1.0","info": {"title": "电网项目数据查询接口","description": "提供电网项目相关信息查询功能,支持按多种条件筛选","version": "v1.0.0"},"servers": [{"url": "***"}],"paths": {"***": {"post": {"description": "查询电网项目信息","operationId": "GetProjectInfo","parameters": [{"name": "PROJECTNAME","in": "query","description": "项目名称(示例:110kV梁营至高桥110kV线路单线开断环入安澜变工程(架空),类型:text)","required": false,"schema": {"type": "string"}},{"name": "PROJECTTYPE","in": "query","description": "项目类型(单项工程/输变电工程,类型:varchar)","required": false,"schema": {"type": "string"}},{"name": "TYPE","in": "query","description": "工程类型(示例:架空线路工程/110千伏工程/间隔扩建 /间隔改造/架空-电缆部分/变电站新建      类型:varchar)","required": false,"schema": {"type": "string"}},{"name": "VOLTAGE","in": "query","description": "电压等级(取值:110kV/35kV/220kV/500kV  类型:varchar)","required": false,"schema": {"type": "string"}},{"name": "MANAGER_UNIT","in": "query","description": "管理部门(示例:苏州、南京,类型:varchar)","required": false,"schema": {"type": "string"}},{"name": "DESIGN_UNIT","in": "query","description": "设计单位(示例:南京中儒电力设计有限公司,类型:varchar)","required": false,"schema": {"type": "string"}},{"name": "REVIEW_UNIT","in": "query","description": "评审单位(示例:省经研院规划评审中心,类型:varchar)","required": false,"schema": {"type": "string"}},{"name": "CONTACT_MAN","in": "query","description": "联系人(示例:潘芸13862109602,类型:varchar)","required": false,"schema": {"type": "string"}},{"name": "ITEMPHASE","in": "query","description": "项目阶段(取值:初设/可研 类型:varchar)","required": false,"schema": {"type": "string"}},{"name": "REVIEWBACK","in": "query","description": "评审退回状态(示例:退回,类型:varchar)","required": false,"schema": {"type": "string"}},{"name": "FLOW_STATE","in": "query","description": "流转状态(取值:资料上报/收口资料上传/评审结束/正式评审记录上传/收口资料审核/收口审核/计划专责计划审核/预审意见填写/正式评审/评审通过    类型:varchar)","required": false,"schema": {"type": "string"}},{"name": "TURN_STATE","in": "query","description": "流转状态(取值:未结束流转/已结束流转 类型:varchar)","required": false,"schema": {"type": "string"}},{"name": "FORMAL_STATE","in": "query","description": "正式评审状态(取值:未结束/已结束/已结束评审  类型:varchar)","required": false,"schema": {"type": "string"}},{"name": "ITEM_STATE","in": "query","description": "项目状态(取值:通过/未申报/未提交/退回完善/不通过   类型:varchar)","required": false,"schema": {"type": "string"}},{"name": "INNER_STATE","in": "query","description": "匹配计划内项目状态(取值:已匹配/未匹配  类型:varchar)","required": false,"schema": {"type": "string"}},{"name": "PLAN_START_TIME","in": "query","description": "计划开始时间范围(示例:[\"2020-01-01\",\"2023-09-30\"],类型:varchar,格式:时间范围)","required": false,"schema": {"type": "string"}},{"name": "REVIEW_TIME","in": "query","description": "评审时间范围(示例:[\"2018-01-03\",\"2024-09-02\"],类型:varchar,格式:时间范围)","required": false,"schema": {"type": "string"}},{"name": "PLAN_REVIEW_TIME","in": "query","description": "计划评审时间范围(示例:[\"2018-01-03\",\"2024-09-02\"],类型:varchar,格式:时间范围)","required": false,"schema": {"type": "string"}},{"name": "ESTIMATE_STATE","in": "query","description": "文件评审阶段(示例:送审,类型:varchar,注释:文件评审阶段)","required": false,"schema": {"type": "string"}}],"deprecated": false}}},"components": {"schemas": {}}
}

由于刚刚接触后端的报错如下:

2025-08-03T09:14:57.351+08:00  WARN 3049334 --- [0.0-8089-exec-6] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing: public org.springframework.http.ResponseEntity<com.project.filter.dto.FilterResponse> com.project.filter.controller.FilterTestCtroller.filterData(java.util.Map<java.lang.String, java.lang.Object>)]

大致的错误说的就是:在我的 Spring Boot 应用中,客户端发送的请求缺少了必要的请求体(request body),具体来说就是在FilterTestCtroller控制器中的filterData方法期望接收一个Map<String, Object>类型的请求体,但客户端在发送请求时没有提供这个请求体,导致 Spring 无法解析请求内容,从而抛出HttpMessageNotReadableException异常。

修改如下后即可正常测试:

{"openapi": "3.1.0","info": {"title": "电网项目数据查询接口","description": "提供电网项目相关信息查询功能,支持按多种条件筛选","version": "v1.0.0"},"servers": [{"url": "***"}],"paths": {"***": {"post": {"description": "查询电网项目信息","operationId": "GetProjectInfo","requestBody": {"required": false,"content": {"application/json": {"schema": {"type": "object","properties": {"PROJECTNAME": {"type": "string","description": "项目名称(示例:110kV梁营至高桥110kV线路单线开断环入安澜变工程(架空),类型:text)"},"PROJECTTYPE": {"type": "string","description": "项目类型(单项工程/输变电工程,类型:varchar)"},"TYPE": {"type": "string","description": "工程类型(示例:架空线路工程/110千伏工程/间隔扩建 /间隔改造/架空-电缆部分/变电站新建      类型:varchar)"},"VOLTAGE": {"type": "string","description": "电压等级(取值:110kV/35kV/220kV/500kV  类型:varchar)"},"MANAGER_UNIT": {"type": "string","description": "管理部门(示例:苏州、南京,类型:varchar)"},"DESIGN_UNIT": {"type": "string","description": "设计单位(示例:南京中儒电力设计有限公司,类型:varchar)"},"REVIEW_UNIT": {"type": "string","description": "评审单位(示例:省经研院规划评审中心,类型:varchar)"},"CONTACT_MAN": {"type": "string","description": "联系人(示例:潘芸13862109602,类型:varchar)"},"ITEMPHASE": {"type": "string","description": "项目阶段(取值:初设/可研 类型:varchar)"},"REVIEWBACK": {"type": "string","description": "评审退回状态(示例:退回,类型:varchar)"},"FLOW_STATE": {"type": "string","description": "流转状态(取值:资料上报/收口资料上传/评审结束/正式评审记录上传/收口资料审核/收口审核/计划专责计划审核/预审意见填写/正式评审/评审通过    类型:varchar)"},"TURN_STATE": {"type": "string","description": "流转状态(取值:未结束流转/已结束流转 类型:varchar)"},"FORMAL_STATE": {"type": "string","description": "正式评审状态(取值:未结束/已结束/已结束评审  类型:varchar)"},"ITEM_STATE": {"type": "string","description": "项目状态(取值:通过/未申报/未提交/退回完善/不通过   类型:varchar)"},"INNER_STATE": {"type": "string","description": "匹配计划内项目状态(取值:已匹配/未匹配  类型:varchar)"},"PLAN_START_TIME": {"type": "string","description": "计划开始时间范围(示例:[\"2020-01-01\",\"2023-09-30\"],类型:varchar,格式:时间范围)"},"REVIEW_TIME": {"type": "string","description": "评审时间范围(示例:[\"2018-01-03\",\"2024-09-02\"],类型:varchar,格式:时间范围)"},"PLAN_REVIEW_TIME": {"type": "string","description": "计划评审时间范围(示例:[\"2018-01-03\",\"2024-09-02\"],类型:varchar,格式:时间范围)"},"ESTIMATE_STATE": {"type": "string","description": "文件评审阶段(示例:送审,类型:varchar,注释:文件评审阶段)"}}}}}},"deprecated": false}}},"components": {"schemas": {}}
}

问题说明:

       修改后的 OpenAPI 规范与之前的版本相比,核心区别在于参数传递方式的变更。

1. 参数位置的根本变化

  • 原版本:所有参数定义在parameters数组中,且in: "query",表示参数通过URL 查询字符串传递(即拼接在 URL 末尾,格式如?PROJECTNAME=xxx&VOLTAGE=110kV)。

  • 修改后:移除了parameters数组,所有参数迁移至requestBody中,通过请求体(JSON 格式) 传递(参数包含在 HTTP 请求的 body 中,而非 URL)。

2.结构上的具体差异

  • 对比项原版本修改后版本
    参数容器使用parameters数组定义每个参数使用requestBody.content.application/json.schema.properties定义参数
    参数传递载体URL 查询字符串请求体(JSON 格式)
    前端请求格式POST /api/filter/search?PROJECTNAME=xxxPOST /api/filter/search,body 为{"PROJECTNAME":"xxx"}
    与后端的兼容性需后端用@RequestParam接收参数需后端用@RequestBody接收参数
http://www.dtcms.com/a/313329.html

相关文章:

  • 多模态后训练反常识:长思维链SFT和RL的协同困境
  • GitLab 代码管理平台部署及使用
  • CCF-GESP 等级考试 2025年6月认证C++一级真题解析
  • 扩散模型(一)——综述
  • 介绍JAVA语言、介绍greenfoot 工具
  • 案例介绍|JSON数据格式的转换|pyecharts模块简介
  • noob靶机复现笔记
  • 纯JavaScript实现文本选择工具栏:功能详解与源码解析
  • RAG 知识库实战指南:基于 Spring AI 构建 AI 知识问答应用
  • Git用法记录
  • UE5的渲染Debug技巧
  • C语言字符串拷贝的三重境界:从下标到指针的华丽变身
  • 设备健康管理标准规范:技术架构与合规性实现指南
  • 《人形机器人的觉醒:技术革命与碳基未来》——类人关节设计:人工肌肉研发进展及一款超生物肌肉Hypermusclet的设计与制造
  • K8S服务发现原理及开发框架的配合
  • k8s黑马教程笔记
  • LeetCode 刷题【29. 两数相除】
  • 波士顿房价预测工具 - XGBoost实现
  • 2.4.1-2.4.3控制范围-控制进度-控制成本
  • C++ 生成动态库.dll 及 C++调用DLL,C++ 生成静态库.lib及 C++调用lib
  • 其它IO函数
  • 在 ArkUI 中实现丝滑嵌套滚动:让你的页面像抖音一样顺滑
  • Redis——运维篇
  • 避不开的数据拷贝
  • 北斗变形监测技术应用与优势
  • 【AI云原生】1、Function Calling:大模型幻觉破解与Agent底层架构全指南(附Go+Python实战代码)》
  • 子区间问题
  • 差分 前缀和
  • 无人机集群协同三维路径规划,采用冠豪猪优化器(Crested Porcupine Optimizer, CPO)实现,Matlab代码
  • 【Django】-8- 视图和模型的关联