当前位置: 首页 > 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.lryc.cn/news/608763.html

相关文章:

  • WebMvc自动配置流程讲解
  • MySQL 索引失效的场景与原因
  • 嵌入式开发学习———Linux环境下IO进程线程学习(二)
  • 04.Redis 的多实例
  • 笔试——Day27
  • 前端面试手撕题目全解析
  • 【数据迁移】Windows11 下将 Ubuntu 从 C 盘迁移到 D 盘
  • Redis——常用指令汇总指南(三)(哈希类型)
  • Odoo OWL前端框架全面学习指南 (后端开发者视角)
  • 三角洲行动ACE反作弊VT-d报错?CPU虚拟化如何开启!
  • GitOps:云原生时代的革命性基础设施管理范式
  • Ubuntu20.04 Carla安装与和Ros联合仿真
  • Ubuntu22.4部署大模型前置安装
  • AI + 云原生:正在引爆下一代应用的技术革命
  • LabVIEW小波变换检测信号断点
  • HCIP笔记(第四章)
  • 悬挂的绳子,它的函数方程是什么样子的?
  • Python Dash 全面讲解
  • 大屏项目展示
  • 基于Springboot+UniApp+Ai实现模拟面试小工具八:管理端基础功能实现
  • RAG与智能体技术全景解析:架构革新、场景落地与未来趋势
  • linux2.6 和 unix-v6 源码实验
  • uni-app学习笔记01-项目初始化及相关文件
  • Java小红书源码1:1还原uniapp_仿小红书源码
  • UniApp 实现顶部固定导航栏 Tab 及滚动变色效果
  • 7.13.B+树
  • io_setup系统调用及示例
  • [AI8051U入门第十五步]W5500实现DHCP自动获取IP
  • UE5的渲染Debug技巧
  • [每周一更]-(第154期):Docker 底层深度剖析:掌控 CPU 与内存资源的艺术