【二】Spring Boot 整合Swagger

一、添加依赖

<!-- swagger 依赖 -->
<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>com.github.xiaoymin</groupId>
    <artifactId>swagger-bootstrap-ui</artifactId>
    <version>1.9.6</version>
</dependency>

二、新增Swagger配置

import com.github.xiaoymin.swaggerbootstrapui.annotations.EnableSwaggerBootstrapUI;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RestController;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.ParameterBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.schema.ModelRef;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.service.Parameter;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

import java.util.ArrayList;
import java.util.List;

/**
 * swagger 配置
 *
 * @author yaoson
 * @date 2022/10/15 16:47
 **/
@Configuration
@EnableSwagger2
@EnableSwaggerBootstrapUI
public class AdminSwaggerConfig {

    /**
     * 新增Admin模块
     *
     * @return
     */
    @Bean
    public Docket coreApi() {
        String moduleCode = "Admin";
        String moduleName = "后台管理系统";
        // 选择那些路径和api会生成document
        return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo(moduleName)).pathMapping("/").select()
                // 对所有api进行监控
                .apis(RequestHandlerSelectors.any())
                .apis(RequestHandlerSelectors.withClassAnnotation(RestController.class)).build()
                // 配置token
                .globalOperationParameters(setHeader());
    }

    /**
     * 配置头部
     * @return
     */
    private static List<Parameter> setHeader() {
        ParameterBuilder tokenPar = new ParameterBuilder();
        List<Parameter> pars = new ArrayList<>();
        tokenPar.name("Authorization").description("token").modelRef(new ModelRef("string")).parameterType("header")
                .required(false).build();
        pars.add(tokenPar.build());
        return pars;
    }


    private static ApiInfo apiInfo(String moduleName) {
        return new ApiInfoBuilder()
                .title(moduleName)  //标题
                .contact(new Contact("Yaoson","https//www.xx.com","123@qq.com"))//联系方式
                .description("接口文档")//描述
                .version("1.0.0")//版本
                .build();
    }

}

三、添加接口

DTO(接口请求参数)

import com.ucontrol.commons.dto.PageDTO;
import io.swagger.annotations.ApiModel;
import lombok.Data;

/**
 * @author
 * @date 2022/10/15 17:26
 **/
@Data
@ApiModel("轮播图分页列表DTO")
public class CarouselPageListDTO extends PageDTO {
}

分页请求参数封装类

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/** * 分页列表DTO * * @author yaoson * @date 2022/10/15 17:24 **/
@Data
@ApiModel("分页列表DTO")
public class PageDTO {

    @ApiModelProperty(value = "当前页", required = true, example = "1")
    private Integer page = 1;

    @ApiModelProperty(value = "每页显示条数", required = true, example = "10")
    private Integer limit = 10;

}

VO(接口返回参数)

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

/**
 * @author
 * @date 2022/10/15 17:19
 **/
@Data
@ApiModel("轮播图分页列表VO")
public class CarouselPageListVO {

    @ApiModelProperty("轮播图ID")
    private Long id;

    @ApiModelProperty("图片URL")
    private String carouselUrl;

    @ApiModelProperty("跳转类型:0-不跳转,1-小程序内部,2-小程序外部")
    private Integer skipType;

    @ApiModelProperty("跳转URL")
    private String skipUrl;

}

分页结果封装类

import com.baomidou.mybatisplus.core.metadata.IPage;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

/**
 * 分页列表结果封装类
 *
 * @author yaoson
 * @date 2022/10/15 17:14
 **/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class PageResult<T> {

    private Integer code;

    private String message;

    private long count;

    private List<T> data;

    private Class<?> otherData;

    public static <T> PageResult<T> page(IPage<T> iPage){
        return new PageResult<T>(200000, "访问成功", iPage.getTotal(), iPage.getRecords(), null);
    }

    public static <T> PageResult<T> page(IPage<T> iPage, Class<?> otherData){
        return new PageResult<T>(200000, "访问成功", iPage.getTotal(), iPage.getRecords(), otherData);
    }
}

ApiModel注解:定义对象名称

ApiModelProperty:定义参数名称

Controller

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.*;

/**
 * <p>
 * 轮播图信息 前端控制器
 * </p>
 *
 * @author yaoson
 * @since 2022-10-15
 */
@Api(tags = {"CMS管理-轮播管理"})
@RestController
@AllArgsConstructor
@RequestMapping("/system/carouselInfo")
public class CarouselInfoController {

    private final CarouselInfoService carouselInfoService;

    @ApiOperation("轮播图分页列表")
    @PostMapping("/queryPageList")
    public PageResult<CarouselPageListVO> queryPageList(@RequestBody CarouselPageListDTO param){
        return carouselInfoService.findPageList(param);
    }

}

Api注解:定义接口名称

ApiOperation注解:定义方法名称

Service

import com.baomidou.mybatisplus.extension.service.IService;/**
 * <p>
 * 轮播图信息 服务类
 * </p>
 *
 * @author yaoson
 * @since 2022-10-15
 */
public interface CarouselInfoService extends IService<CarouselInfo> {

    /**
     * 轮播图分页查询
     * @param param
     * @return
     */
    PageResult<CarouselPageListVO> findPageList(CarouselPageListDTO param);
}
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
 * <p>
 * 轮播图信息 服务实现类
 * </p>
 *
 * @author yaoson
 * @since 2022-10-15
 */
@Service
public class CarouselInfoServiceImpl extends ServiceImpl<CarouselInfoMapper, CarouselInfo> implements CarouselInfoService {

    /**
     * 轮播图分页查询
     *
     * @param param
     * @return
     */
    @Override
    public PageResult<CarouselPageListVO> findPageList(CarouselPageListDTO param) {
        LambdaQueryWrapper<CarouselInfo> query = new LambdaQueryWrapper<>();
        Page<CarouselInfo> page = new Page<>(param.getPage(), param.getLimit());
        IPage<CarouselInfo> carouselInfoPage = this.page(page, query);

        CarouselPageListVO carouselPageListVO = null;
        IPage<CarouselPageListVO> resultPage = new Page<>();
        List<CarouselPageListVO> resultList = new ArrayList<>();
        for (CarouselInfo record : carouselInfoPage.getRecords()) {
            carouselPageListVO = new CarouselPageListVO();
            BeanUtils.copyProperties(record, carouselPageListVO);
            resultList.add(carouselPageListVO);
        }
        resultPage.setRecords(resultList);
        resultPage.setPages(carouselInfoPage.getPages());
        resultPage.setTotal(carouselInfoPage.getTotal());
        resultPage.setSize(carouselInfoPage.getSize());
        resultPage.setCurrent(carouselInfoPage.getCurrent());
        return PageResult.page(resultPage);
    }
}

四、效果

http://localhost:8086/swagger-ui.html#

 

 

 

 http://localhost:8086/doc.html

 

 

 本章到此结束,接下来会继续更新加强整合,尽情期待。

posted @ 2022-10-15 19:12  编程人员老尧  阅读(90)  评论(0)    收藏  举报