自从Springboot升级到2.6.1版本之后再整合Swagger时会报出NPE错误,暂时还没有什么好的解决办法,这篇文章就先带大家使用2.5.1
版本整合下Swagger3
1、整合Swagger
1.1、导入依赖
<!--整合Mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.2</version>
</dependency>
<!--整合Swagger-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>3.0.0</version>
</dependency>
<!-- 官方UI包 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>3.0.0</version>
</dependency>
1.2、新建Swagger配置类
package dev.xuanran.springbootswagger.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import springfox.documentation.RequestHandler;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.oas.annotations.EnableOpenApi;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
import java.util.ArrayList;
@Configuration
@EnableOpenApi //3版本使用这个注解
public class Swagger2Config {
@Bean
public Docket docket(){
return new Docket(DocumentationType.OAS_30)
.apiInfo(apiInfo())//设置API信息
.enable(true) //是否启用Swagger,注意在正式环境关闭
.select() // 通过select方法配置扫描包
.apis(RequestHandlerSelectors.basePackage("dev.xuanran")) //配置要扫描哪个包
.build();
}
public ApiInfo apiInfo(){
Contact contact = new Contact("XuanRan","xuanran.cc","xuanrandev@qq.com");
return new ApiInfo("接口开发文档", "示例Demo","1.0","https://baidu.com",
contact,"your license","license url",new ArrayList<>());
}
}
Swagger地址无法访问问题
到现在为止就已经可以运行起来了,不过自此Swagger3,官方就更改了之前的访问地址,现在需要通过http://localhost:8080/swagger-ui/index.html来访问了,之前的地址会报error
2、整合Mybatis
2.1 Mapper
要使用Mybatis的话Mapper是不能少的,新建类:
package dev.xuanran.springbootswagger.mapper;
import dev.xuanran.springbootswagger.pojo.Student;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
import java.util.List;
@Mapper
@Repository
public interface StudentMapper {
/**
* 获取所有的学生
* @return
*/
List<StudentMapper> getAllStudent();
/**
* 通过ID查找学生
* @param id
* @return
*/
Student getStudentById(int id);
/**
* 添加学生到数据库中
* @param student 数据对象
*/
int addStudent(Student student);
}
其中用到的Student类在这里
package dev.xuanran.springbootswagger.pojo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.stereotype.Component;
@ApiModel("Student学生类")
@Component
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Student {
@ApiModelProperty("学生ID")
private Integer id;
@ApiModelProperty("学生姓名")
private String name;
@ApiModelProperty("学生年龄")
private Integer age;
}
Mapper.xml
我们还需要映射xml文件,在resource文件夹中新建mybatis目录然后再建StudentMapper.xml
映射文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="dev.xuanran.springbootswagger.mapper.StudentMapper">
<resultMap id="stu" type="dev.xuanran.springbootswagger.pojo.Student">
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="age" column="age"/>
</resultMap>
<select id="getStudentById" parameterType="int" resultMap="stu">
select id, name, age
from `mybatis-learn`.student
where id = #{id}
</select>
<insert id="addStudent" parameterType="Student" >
insert into `mybatis-learn`.student(id, name, age)
values (#{id}, #{name}, #{age});
</insert>
</mapper>
3、配置application.yaml
在应用配置文件中配置数据库相关内容
spring:
datasource:
username: root //数据库账号
password: 123456 //数据库密码
url: jdbc:mysql://localhost:3306/mybatis-learn?useSSL=true&serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
mybatis:
mapper-locations: classpath:mybatis/*.xml
type-aliases-package: dev.xuanran.springbootswagger.pojo
3.1、测试数据库访问
运行测试,检查数据库连接是否正常
package dev.xuanran.springbootswagger;
import dev.xuanran.springbootswagger.mapper.StudentMapper;
import dev.xuanran.springbootswagger.pojo.Student;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class SpringBootSwaggerApplicationTests {
@Autowired
private StudentMapper studentMapper;
@Test
public void testData(){
Student student = studentMapper.getStudentById(1);
System.out.println(student);
}
}
整个项目的源码我已经上传到Github,可通过以下链接来查看源码:
https://github.com/XuanRanDev/SpringBoot-Swagger
如果你觉得这篇文章对你有帮助,可帮我点下star,谢谢