idea:springboot项目集成swagger竟然报错了

前言

工作中,用于后端自测最多的就是swagger和postman,相对来说,我更喜欢用swagger进行后端接口测试,因为个人觉得页面更简洁方便,且主要是入参填写方便;swagger调用后会自动生成url,方便前端人员根据自动生成的url调用后端接口;
工作两年了,感觉平时的工作内容都能完成的很快,但是好像除了工作时在现有框架中开发维护功能外,自己都没有完整的从头搭建过项目,难得最近工作不是很忙,想着从头开始练练手,看看这两年时间倒是都学了些什么,结果真的是一言难尽,一步一个坎哎。。。。

错误点

代码基础:此时代码只是写了最基本的controller,server,model层,且service没有任何业务逻辑。直接返回null对象,都报了以下前三点错误;

1、使用swagger必须先引入一下依赖,注意版本
一开始我是按下面引入的依赖包

<dependency>
      <groupId>io.springfox</groupId>
      <artifactId>springfox-swagger2</artifactId>
      <version>2.2.2</version>
</dependency>

<dependency>
      <groupId>io.springfox</groupId>
      <artifactId>springfox-swagger-ui</artifactId>
      <version>2.2.2</version>
</dependency>

引入这个依赖后项目就启不起来了,一开始还以为是前面没有部署好,后来发现应该是版本问题;
解决方法:我的springboot是2.4.3版本的把swagger改成2.9.2版本就可以了

2、按我配置的路径登录swagger页面却打不开
swagger提示的页面
解决方法:启动类增加@EnableSwagger2注解,重新打开swagger页面就可以了

3、调用查询接口时调用到了,但是报错了,看提示应该是返回对象的问题:
下面是我写的一个查询接口示例:
controller:

@RestController
public class TestControll {
  @Autowired
  private TestService testService;

  @GetMapping("/user/{id}")
  @ApiOperation(notes = "查询用户用例测试",value = "查询用户用例测试",httpMethod = "GET")
  public UserInfo getUser(@PathVariable("id") String id){
    System.out.println(id);
    return testService.getUser();
  }
}

UserInfo:

package com.cmf.demo.model;

public class UserInfo {
  private String id;
  private String name;
  private String status;
}

调用结果:
调用结果展示
解决方法:因为返回对象没有get,set方法导致的,所以swagger提示406;
我增加了getter,setter方法就好了;
一开始百度了很久但是都没有结果,后面对比现在一直在做的微服务工程,发现每个返回对象都加了@Getter、@Setter注解,所以我引入了lombok依赖,在返回对象中加上了这两个注解,调用就正常了;
其中lombok注解如下:

<dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <optional>true</optional>
 </dependency>

在基于不调用数据库的前提下,解决上面三个问题后swagger接口可以正常调用且返回200;
进一步代码:server层引用了mapper,想查询数据库的用户数据,结果报了个让我很棘手的问题;

4、加了mapper后swagger调用报错:
java.lang.ClassNotFoundException: oracle.jdbc.OracleDriver

这个提示一看就可以清楚是oracle驱动包没有,所以我在pom文件中加入了下面依赖:

<dependency>
      <groupId>com.oracle.database.jdbc</groupId>
      <artifactId>ojdbc6</artifactId>
      <version>11.2.0.4</version>
    </dependency>

奇怪的问题:自动引入jar提示正常,且该依赖已经由红变成白色了,我以为事情很快就能解决,但是重新调接口查数据库信息的时候又报了同样的错,后面只能找公司大佬帮忙才找到根本的问题,原来本地的maven仓库根本没有正常下载jdbc6.jar,仓库里面都是**^^^lastUpdated.^ **文件(由于下载中断或远程未找到对应的包导致下载失败生成的无用文件,且有这个文件之后都不能正常下载该依赖了,需要删除)。

解决方法:- 找到maven文件的setting.xml文件,修改内部远程仓库的链接,这里我改成了公司的仓库,也可以不改。
- 删除原来仓库中产生的lastUpdated无效文件,重新到配置的远程仓库下载jdbc6依赖(此时如果配置的仓库没有该jar包,会自动在maven自带的远程仓库下载,下载后自动同步到我们配置的内部仓库,下次可以直接在内部配置库下载)
- 果然经过大佬的一系列操作顺利运行了,可以正常调用接口返回数据库信息
- 调用成功

使用

1、在controller层可以使用swagger自带的注解
@ApiOperation(notes = “demo测试用例” ,value = “demo测试用例”,httpMethod = “GET”)
这里定义的值会展示在swagger页面上,标注每个接口的名称
2、在param里面使用@ApiModelProperty(""):可以在swagger看见每个字段的描述

今天就先这样啦,后续继续加新东西的时候如果有问题再更新啦。。。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值