【关于Swagger的接口入参问题以及返回数据问题】
00后博主,正在自学中,有什么想法大家一起分享
🤳博主主页:Copping0606 😁
博主定期更新🤦♂️
谢谢你那么好看还关注我💖
------------------------------------------------------------------------------------分割线-----------------------------------------------------------------------------
相信很多小伙伴在用swagger时,也会出现如下一些问题
1. 参数问题
我们先papa敲了如下代码:
@RestController
@CrossOrigin //解决部分跨域问题
@RequestMapping(value="/student")
@Api(tags = "学生信息接口", value = "学生信息Open api 入口")
pulic class LoginController{
@Autowired
private StudentService studentService;
@RequestMapping(value = "/students")
@ApiOperation(value = "查看所有样品信息", response = ResultModel.class, httpMethod = "GET")
public ResultModel findStudents(StudentEntity studentEntity){//userEntity里面包含了分页的属性<page,limit,以及>,这里写法有很多,后面讲
//......省略一些参数校验
List<StudentEntity> list=studentService.findStudents(studentEntity);
return ResultModel.getResultModel(list);//ResultModel为自己定义的返回数据格式
}
}
这时我们去看swagger的页面http://localhost:(port)/swagger-ui.html#/
(我springboot框架,记得给启动类加 @EnableSwagger2 注解)
我们可以看到,我们查询全部学生前端可能只需要传page,limit两个分页参数
但是他把我们的StudentEntity 的所有参数都需要去填写,
而且我们只需要传两个参数啊,怎么办呢?
这时候我们就可以改一下接口的参数写成
@RestController
@CrossOrigin //解决部分跨域问题
@RequestMapping(value="/student")
@Api(tags = "学生信息接口", value = "学生信息Open api 入口")
pulic class LoginController{
@Autowired
private StudentService studentService;
@RequestMapping(value = "/students")
@ApiOperation(value = "查看所有样品信息", response = ResultModel.class, httpMethod = "GET")
public ResultModel findStudents(@ApiParam(value = "分页起始位置", example = "0")
@RequestParam Integer page,
@ApiParam(value = "分页获取展示条数", example = "10")
@RequestParam Integer limit,){//userEntity里面包含了分页的属性<page,limit,以及>,这里写法有很多,后面讲
//......省略一些参数校验
List<StudentEntity> list=studentService.findStudents(studentEntity);
return ResultModel.getResultModel(list);//ResultModel为自己定义的返回数据格式
}
}
这时再去看就只有这两个参数了,可是问题又来了,我现在前端要传一堆参数过来,当然里面全是实体类StudentEntity的参数,但是Entity中的部分参数,又没有我们怎么办呢?
这时我们就需要加入VO类
@RequestMapping(value = "/add")
@ApiOperation(value = "新增学生信息", response = ResultModel.class, httpMethod = "POST")
public ResultModel add(AddStudentParamVo addStudentParamVo) {
StudentEntity studentEntity =new StudentEntity();
studentEntity .setName(FormatNull.nullToString(addStudentParamVo.getName()));
studentEntity .setStudentNo(FormatNull.nullToString(addStudentParamVo.getStudentNo()));
studentEntity .setSex(FormatNull.nullToString(addStudentParamVo.getSex()));
studentEntity .setBirthday(FormatNull.nullToLong(addStudentParamVo.getBirthday()));
...........
int result= sampleService.add(sampleEntity);
return ResultModel.getResultModel(result);//ResultModel为自己定义的返回数据格式
}
再去看我们就可以可以看到我们的参数都是想要的参数;
现在入参解决了出参呢?
其实也是通过VO去解决
2.报java.lang.NumberFormatException: For input string: “”…错误,
其实就是依赖的错误,swagger2会依赖了一个叫swagger-models 1.5.20的依赖,它只做了是否为null的判断而没有去判断空串的情况,所以我们只需要移除内置的swagger-models,更换为1.5.21版本的就行了,我的如下:
<!-- Swagger -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
<exclusions>
<exclusion>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
</exclusion>
<exclusion>
<groupId>io.swagger</groupId>
<artifactId>swagger-models</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
<version>1.5.21</version>
</dependency>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-models</artifactId>
<version>1.5.21</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
当然swagger还有些地方我也不会d,嘻嘻