前言
工作中,用于后端自测最多的就是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页面却打不开
解决方法:启动类增加@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看见每个字段的描述
今天就先这样啦,后续继续加新东西的时候如果有问题再更新啦。。。