最近事情太多了,有点忙,博主在经历了5面之后终于拿到了阿里-蚂蚁金服的offer。
没时间更新太多,就记一个简单的源码错误吧。
这次要喷的是:
//OpenApi For Spring compile "io.swagger.core.v3:swagger-models:2.0.10" compile "io.swagger.core.v3:swagger-annotations:2.0.10" compile "io.swagger.core.v3:swagger-integration:2.0.10"
博主的项目不是spring boot项目所以要单独引入swagger3的包(别问我为什么要用3,哈哈,因为博主的项目非常复杂,在同一个项目中还用了2)
好了话不多说,直接上代码:
@Operation(summary = "Move accounts from source-lists to target-lists" ,description = "Move accounts from source-lists to target-lists", responses = { @ApiResponse(responseCode = "200",description = "Success", content = @Content(mediaType = "application/json", schema = @Schema(implementation = BasicRespDTO.class))), @ApiResponse(responseCode = "400", description = "Bad Reqeust - example, improperly formatted start/end date; ",content = @Content(mediaType = "application/json", schema = @Schema(implementation = AlmApiError.class))), @ApiResponse(responseCode = "401", description = "UnAuthorized - for example, the OktaId passed is not associated with the BPN that is passed.",content = @Content(mediaType = "application/json", schema = @Schema(implementation = AlmApiError.class))), @ApiResponse(responseCode = "500", description = "Internal Server Error - ALM Server error processing request.",content = @Content(mediaType = "application/json", schema = @Schema(implementation = AlmApiError.class)))}, requestBody = @io.swagger.v3.oas.annotations.parameters.RequestBody( required = true,content = @Content(mediaType = "application/json", schema = @Schema(implementation = AccountsMoveReqDTOV2.class))) )
可以看到很常规的一个注解
但是在最终的openApi3界面上缺显示了一段奇怪的字符:
“永远在requestBody的Schema上面显示-default response”
这尼玛也太奇怪了吧?这明明是个入参DTO为毛显示default response?
博主试了很多方法,都没解决这个奇怪的问题---一直都显示“default response”
-----
实在受不了了就去查openApi3的源码了:
发现openApi3使用了这个类中的:
org/springdoc/core/Constants.java
中的:
public static final String DEFAULT_DESCRIPTION = "default response";
emmmm
-----------
继续找找
有三处源码中用到了这个定义:
1.这个没毛病,说的是响应体的description(有点眉目了)
if (StringUtils.isBlank(apiResponse.getDescription())) { apiResponse.setDescription(DEFAULT_DESCRIPTION); }
2.
这个也没毛病 和1差不多
private void setDescription(io.swagger.v3.oas.annotations.responses.ApiResponse response, ApiResponse apiResponseObject) { if (StringUtils.isNotBlank(response.description())) { apiResponseObject.setDescription(response.description()); } else { apiResponseObject.setDescription(DEFAULT_DESCRIPTION); } }
3.
就是这里,我靠,你说你一个requestBody的description为null
你为什么源码要去用“default response”?????
这不是显然的偷懒吗?
if (StringUtils.isNotBlank(requestBody.description())) { requestBodyObject.setDescription(requestBody.description()); isEmpty = false; } else { requestBodyObject.setDescription(DEFAULT_DESCRIPTION); }
最终博主在自己的openApi3中的requestBody加入了description这个字段,解决了问题。。。
---------------
后续,楼主去swagger3/openApi 的源码库看了,作者好像也发现了这个问题
在后续的版本修复了这个bug
我看了具体的代码,用的是局部变量名在作为requestBody的default description
(源码不在展示)
---------------
所以说使用造好的轮子其实也会有问题,虽然本次问题很简单,但是一定要有查看源码的能力!!
加油!!
相关推荐
Swagger3,也称为OpenAPI Specification 3.0,是一个用于设计、构建、记录和使用RESTful Web服务的工具。在Spring Boot应用中集成Swagger3,我们可以生成清晰的API文档,方便开发者理解和使用接口。Swagger UI允许...
它是一款专为Java开发者设计的Swagger UI增强工具,同时也支持OpenAPI 3规范,从而提供了一站式的API文档管理和展示方案。 Knife4j的核心功能在于其对Swagger2的扩展和优化。Swagger2是一种流行的RESTful API文档化...
综上所述,这个"Swagger搜索源码包"可能包含了一个完整的OpenAPI 3.0.0规范文件,详细描述了搜索API的各个方面,包括请求参数、响应模型、错误处理等。通过分析这个源码包,我们可以学习如何在Swagger中设计和实现...
Swagger 是一个流行的API开发工具,它提供了一套规范和实现,用于设计、构建、文档化和使用RESTful Web服务。在Java环境中,Swagger通常与Spring Boot框架结合使用,以简化API的开发和测试过程。本篇文章将深入探讨...
本项目为基于light-4j构建的RESTful框架设计源码,集成了Swagger 2.0和OpenAPI 3.0支持,包含91个文件,涵盖42个Java源文件、15个JSON配置文件、13个XML配置文件、5个YAML配置文件、4个证书和密钥文件,适用于构建...
标题中的"flycheck-openapi-spectral"是一款针对Emacs编辑器的插件,它使得开发者能够在编辑Swagger 2或OpenAPI 3规范文档时获得实时的语法检查与验证功能。"flycheck"是Emacs中的一个错误检查工具,能够集成各种...
Swagger的核心是OpenAPI Specification,它定义了一种标准的、人可读的YAML或JSON格式,用于描述Web服务接口及其操作。 在这个集成示例中,SpringMVC作为Web应用的基础架构,Fastjson用于在后端和前端之间进行数据...
Swagger的核心是OpenAPI Specification(OAS),它是一种标准化的规范,用于描述RESTful API的接口。这个规范允许开发者以YAML或JSON格式定义服务的接口,包括端点、请求方法、模型以及参数等。通过这个规范,...
3. **Swagger Codegen**:这是一套工具,可以根据OpenAPI规范自动生成客户端库、服务器 stubs、API文档等。支持多种编程语言,如Java、JavaScript、Python、Ruby等,大大简化了API的实现和使用过程。 在Crystal语言...
Swagger规范,也称为OpenAPI规范,是一种JSON格式的规范,用于描述Web服务的接口,使得API的消费者能够轻松理解和使用这些接口。 在"前端项目-swagger-ui.zip"这个压缩包中,包含的是Swagger UI的源码,具体文件名...
SpringDoc OpenAPI 是一个强大的工具,能够帮助我们轻松生成 OpenAPI 3.0 规范的文档,并提供交互式的 Swagger UI 界面。 本文跟着博主一起来学习如何在 Spring Boot 3 项目中整合 SpringDoc OpenAPI,生成在线接口...
Swagger的核心组件是OpenAPI规范,它定义了一种标准格式来描述API的结构、操作、模型等。 接下来,我们来看看Spring AOP。AOP允许我们在不修改原有代码的情况下,插入额外的功能,如日志记录、事务管理、性能监控等...
它使用 OpenAPI Specification(以前称为 Swagger Specification),这是一个 YAML 或 JSON 文件格式,用于定义 API 的端点、操作、模型和参数。Swagger UI 是一个基于这个规范的交互式界面,允许开发者探索和测试 ...
【标题】"openapi-demo-php-master_openapi_DEMO_源码.zip" 提供的是一个基于 PHP 实现的 OpenAPI 示例项目。OpenAPI 是一种规范,它定义了如何描述 RESTful API,使得开发者能够轻松地理解和使用 API。这个压缩包...
1. 自动发现和展示API:通过读取OpenAPI规范(以前称为Swagger规范)文件,Swagger UI可以自动构建一个详细的API文档,列出所有可用的端点、参数、请求和响应。这使得开发者无需深入代码就能了解API的功能。 2. ...
- **API定义:** Swagger基于OpenAPI规范(之前称为Swagger Spec),允许开发者用YAML或JSON来描述API的资源、操作、模型和参数。 - **自动文档生成:** 通过解析源代码中的注解,Swagger能自动生成易于理解的API...
Swagger 是一个流行的API开发工具,它提供了一种规范和完整的框架实现,用于为RESTful API创建、设计和文档化。Spring Boot 是一个基于Java的轻量级框架,它简化了Spring应用的初始搭建以及开发过程。当我们谈论...
在API开发中,Swagger 2通过使用OpenAPI Specification(OAS,以前称为Swagger Specification)来定义和描述API。OAS是一种JSON格式的规范,用于明确表述API的各种细节,包括端点、参数、响应等,使得开发者能够清楚...
1. **OpenAPI规范**:OpenAPI(原名为Swagger)定义了一种标准格式,用于描述RESTful API的接口、模型以及操作,包括请求和响应的结构。开发者可以通过阅读OpenAPI文档,快速了解接口的使用方式,减少了试错成本。 ...