SpringBoot集成Swagger2

时间:2022-07-22
本文章向大家介绍SpringBoot集成Swagger2,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

首先说一下这个东西的作用:它可以很轻松整合到Spring Boot中,并与Spring MVC程序配合组织出强大RESTful API文档。简单说就是Swagger2可以很方便帮我们生成RESTful API文档,提高协同开发效率。

常用注解:

定义在类上:@Api

定义在方法上:@ApiOperation

定义在参数上:@ApiParam

定义在实体类上:@ApiModel

定义在实体类属性上:@ApiModelProperty

例如:

@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("edu_course_collect")
@ApiModel(value="CourseCollect对象", description="课程收藏")
public class CourseCollect extends BaseEntity {

    private static final long serialVersionUID=1L;

    @ApiModelProperty(value = "课程讲师ID")
    private String courseId;

    @ApiModelProperty(value = "课程专业ID")
    private String memberId;
    
}

@Api(tags = "讲师管理")
@RestController
@RequestMapping("/admin/edu/teacher")
public class TeacherController {

    @Autowired
    private TeacherService teacherService;

    @ApiOperation("所有讲师列表")
    @GetMapping("list")
    public List<Teacher> listAll() {
        return teacherService.list();
    }

    @ApiOperation(value = "根据ID删除讲师",notes = "根据ID删除讲师,逻辑删除")
    @DeleteMapping("remove/{id}")
    public boolean removeById(@ApiParam(value = "讲师ID",required = true) @PathVariable String id){
        return teacherService.removeById(id);
    }

}

创建一个SpringBoot工程,添加相关的依赖

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.9.2</version>
</dependency>
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.9.2</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

然后就是Swagger2配置了,这很简单很轻松,只需要你自己提供一个Docket的Bean。

这里我建了一个config包,将SwaggerConfig类写在里面。

@Configuration
@EnableSwagger2
public class SwaggerConfig {
    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2);
    }
}

然后运行SpringBoot项目,访问http://localhost:8080/swagger-ui.html就可以看到一个界面了。到这里集成就基本完毕。

下面进行CRUD的测试。

我们去建一个User类,用来测试使用。我这里放在entity层,

注意:前三个注解是Lombok的注解,后面关于Api开头的注解都是Swagger提供的,主要效果是在项目运行后生成的html中有一些附加信息,可以不加的。

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    @ApiModelProperty("用户id")
    private Integer id;
    @ApiModelProperty("用户姓名")
    private String name;
    @ApiModelProperty("用户年龄")
    private Integer age;
}

接下来我们去写数据操作,新建dao层一个UserDao接口和他的实现类。为了方便,我就不引入数据库了,我使用map来做数据的CRUD。

public interface UserDao {
    Collection<User> findAll();
    User findById(Integer id);
    void delete(Integer id);
    void save(User user);
}
@Repository
public class UserDaoImpl implements UserDao {

    private static Map<Integer,User> userMap;

    static {
        userMap = new HashMap<>();
        userMap.put(1,new User(1,"乐心湖1",181));
        userMap.put(2,new User(2,"乐心湖2",182));
        userMap.put(3,new User(3,"乐心湖3",183));
    }
    @Override
    public Collection<User> findAll() {
        return (userMap.values());
    }

    @Override
    public User findById(Integer id) {
        return userMap.get(id);
    }

    @Override
    public void delete(Integer id) {
        userMap.remove(id);
    }

    @Override
    public void save(User user) {
        userMap.put(user.getId(),user);
    }
}

controller层下建UserController类

@RestController
@Api(tags = "用户管理相关接口")
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserDao userDao;

    @GetMapping("/findAll")
    @ApiOperation("查询所有用户")
    public Collection<User> findALl(){
        return userDao.findAll();
    }

    @GetMapping("/findById/{id}")
    @ApiOperation("根据id查询用户")
    public User findById(@PathVariable Integer id){
        return userDao.findById(id);
    }

    @PutMapping("/save")
    @ApiOperation("添加或者修改用户")
    public void save(@RequestBody User user){
        userDao.save(user);
    }

    @DeleteMapping("/delete/{id}")
    @ApiOperation("根据id删除用户")
    public void delete(@PathVariable Integer id){
        userDao.delete(id);
    }

}

重新运行项目,刷新页面。