项目实战系列之swagger在线文档无法访问的一次踩坑记【二】

目前公司用的swagger在线文档,可是昨天我更新代码后,文档就打不开了,访问的时候后台报错,下面上图:
在这里插入图片描述
在这里插入图片描述
开始也不知道是为什么,以为项目哪个地方有了问题,上厕所的时候,问了一个同事,他那居然可以,由于着急调试接口,就用postman测了一下,今天来上班发现还是不行,然后我就打断点跟了下代码:
在这里插入图片描述
这里需要用异常断点调试,不然swagger会拦截项目里写了swagger的注解,如图:
在这里插入图片描述
根据description找到对应的位置:
在这里插入图片描述
因为在我平时的写法中,没有参数名后面用中括号的,而且这里是Delete请求方式,一般都是放到body里面的,我猜测是写这个接口的人和对应的前端不知道怎么传数组,关于怎么传参下面进行解释,当时我就把注解改成了下面这样:@RequestParam(value = “idList[]”) -->@RequestBody ,代码就不贴了,然后重启项目再试,就可以了。

问题解决了,但是代码不是我写的,我就找到提交代码的人,问他为什么这个地方这样传参,不放到body里面,他给我的解释居然真是不这样传不过去,到这里我就明白了,让他先改成放到body里面,然后我看了下前端代码传参是这样的:
在这里插入图片描述
在这里插入图片描述
然后我让他改成下面这样:
在这里插入图片描述
在这里插入图片描述
其实前端传参数的位置就是这个data或者params,params是把参数拼到url上,而data是把参数放到请求体里,但是由于项目里大面积的get请求,而且网上的例子大多也都是params,很多人这个地方就写params,然后会导致数组不能传不到后台,改成这样之后,重新测试了下他这个接口也成功了,java中SpringMVC那个RequestParam注解也一样是接收url中的参数。

还有一个问题就是为什么之前我那个同事可以访问文档,我却不可以,他说他代码都提交了,我就仔细看了下他本地的代码和我那里的,发现两个注解的属性值不同:
在这里插入图片描述
我就尝试把这俩属性值改成一样,然后照样可以访问,具体源码怎么处理的我就不去深究了。

另外swagger文档还有三个问题:

  • swagger默认参数是非必传,mvc 的 RequestParam 注解默认是必传,这样会导致在线文档和实际的不一致
  • 如果controller方法接收的是一个对象,那么这个对面的属性在文档中就默认全是非必传,如果对象属性很多,处理是很不方便的
  • swagger在线文档测试不能传附件,有附件的接口还是需要用postman去测
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Swagger UI是一款RESTFUL接口的文档在线自动生成 功能测试功能软件。       现在多数的项目开发中,网站和移动端都需要进行数据交互和对接,这少不了使用REST编写API接口这种场景。例如有些团队,移动端交由了另一团队开发,不同开发小组之间就需要以规范和文档作为标准和协作基础。良好的文档可以让开发事半功倍,而作为又懒又要效率又能交代的码农,当然最希望一 切自动化,或用小聪明来找到最适合的工具。       Swagger-UI简单而一目了然。它能够纯碎的基于html javascript实现,只要稍微整合一下便能成为方便的API在线测试工具。       项目的设计架构中一直提倡使用TDD(测试驱动)原则来开发,swagger-ui在这方面更是能提供很大帮助。 Swagger-UI更倾向于在线测试接口和数据,但其核心是一个javascript插件,只要稍作修改,便能按需求定制出不同格式的说明文档,在github上更是基于它集成到各种语言环境,分支众多。        其官方提供了一个离线版本,它的使用方法十分简单:直接在js格式的资源文件中录入REST API的json信息,便能容易地生成不同模块下的API列表,每个API接口描述和参数、请求方法都能在每个json数组中定制。下面是目前项目中使用到的部分预览图:  Swagger-UI 的官方地址: http://swagger.wordnik.com Github上的项目地址: https://github.com/wordnik/swagger-ui 官方提供的demo地址 http://petstore.swagger.wordnik.com/ 标签:api
要在Net6 WebApi中设置访问Swagger在线文档的地址需要输入账户密码,可以通过以下步骤完成: 1. 在Net6 WebApi项目中安装Swashbuckle.AspNetCore包,可以使用NuGet管理器或者命令行安装。 2. 在Startup.cs文件的ConfigureServices方法中添加Swagger服务: ```csharp services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" }); }); ``` 3. 在Startup.cs文件的Configure方法中启用Swashbuckle中间件: ```csharp app.UseSwagger(); app.UseSwaggerUI(c => { c.RoutePrefix = "swagger"; c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1"); c.DocExpansion(DocExpansion.None); c.EnableFilter(); c.EnableDeepLinking(); c.EnableValidator(); c.DisplayRequestDuration(); c.DisplayOperationId(); c.DisplayRequestHeaders(); c.DisplayServer(); }); ``` 4. 在程序中设置Swagger访问授权: ```csharp c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme { Description = "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"", Name = "Authorization", In = ParameterLocation.Header, Type = SecuritySchemeType.Http, Scheme = "bearer", Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "Bearer" } }); c.AddSecurityRequirement(new OpenApiSecurityRequirement { { new OpenApiSecurityScheme { Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "Bearer" } }, new string[] {} } }); ``` 以上代码中,设置了一个名为Bearer的安全定义,其类型为Http,方案为bearer。然后将其添加到了全局安全要求中,表示所有的API都需要授权才能访问。 在访问Swagger在线文档的时候,需要输入账户密码来进行授权。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值