springboot 集成 swagger 和 swagger-bootstrap-ui

1 项目集成:

第一步:pom.xml 添加相关的依赖jar包
   <!-- 升级版的swagger依赖的jar包-->

        <!-- swagger用于定义API文档 -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.9.2</version>
        </dependency>

        <!--美化swagger-->
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>swagger-bootstrap-ui</artifactId>
            <version>1.9.3</version>
        </dependency>
第二步: 创建两个相关的配置类,记得添加注解-> @Configuration 和 @EnableSwagger2
第1个配置类:
@Configuration
@EnableSwagger2
public class SwaggerConfig {

    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.icitic.mc.user.services.web")) //此次每次使用须换成自己的web接口的全限定类名
                //.paths(AppUtility.isProd() ? PathSelectors.none() : PathSelectors.any())
                .paths(PathSelectors.any())
                .build();
    }
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("测试swagger")
                .description("展示swagger界面")
                .termsOfServiceUrl("http://localhost:9001/swagger-ui.html")
                .contact(new Contact("tina.liu", "http://localhost:9001/swagger-ui.html", "xxxxx@qq.com"))
                .version("1.0")
                .build();
    }

}

第2个配置类:
@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {

    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
        
        //排除静态文件
        
        registry.addResourceHandler("swagger-ui.html")
                .addResourceLocations("classpath:/META-INF/resources/");

        registry.addResourceHandler("doc.html")
                .addResourceLocations("classpath:/META-INF/resources/");

        registry.addResourceHandler("/webjars/**")
                .addResourceLocations("classpath:/META-INF/resources/webjars/");
        super.addResourceHandlers(registry);
    }

}
第三步: 查看 http://127.0.0.1:8089/doc.html

2 . swagger 相关的一些注解 及范例:

@Api(tags = "用户模块"):用在类上,说明该类的作用。
@ApiOperation:注解来给API增加方法说明。
@ApiImplicitParams : 用在方法上包含一组参数说明。
@ApiImplicitParam:用来注解来给方法入参增加说明。
@ApiResponses:用于表示一组响应
@ApiResponse:用在@ApiResponses中,一般用于表达一个错误的响应信息

  • code:数字,例如400
  • message:信息,例如"请求参数没填好"
  • response:抛出异常的类
    @ApiModel:描述一个Model的信息(一般用在请求参数无法使用@ApiImplicitParam注解进行描述的时候)
  • @ApiModelProperty:描述一个model的属性
    注意:@ApiImplicitParam的参数说明:

paramType:指定参数放在哪个地方
header:请求参数放置于Request Header,使用@RequestHeader获取
query:请求参数放置于请求地址,使用@RequestParam获取
path:(用于restful接口)-->请求参数的获取:@PathVariable
body:(不常用)
form(不常用)
name:参数名
dataType:参数类型
required:参数是否必须传 true | false
value:说明参数的意思
defaultValue:参数的默认值

(1)Model (数据库表的映射对象,及实体类)中使用 Swagger 注解


@ApiModel(value = "UserEntity", description = "用户对象")
public class UserEntity implements Serializable{

    @ApiModelProperty(value ="用户id",name="id",dataType="Long",required = false,example = "1",hidden = false )
    private Long id;

    @ApiModelProperty(value ="用户名",name="userName",dataType="String",required = false,example = "关羽" )
    private String userName;

    @ApiModelProperty(value ="用户性别",name="userSex",dataType="String",required = false,example = "男" )
    private String userSex;
}

(2) web层API接口(controller类) 中使用swagger注解

@RestController
@Slf4j
@RequestMapping(value = "/v1/service")
@RefreshScope // 支持nacos配置动态刷新的功能
@Api(tags = "用户模块")

public class UserApi {

    @Autowired
    private UserService userService;

    @ApiOperation(value = "分页查询")
    @ApiImplicitParams(value ={
            @ApiImplicitParam(name = "page",value="当前页码",required = false,dataType = "Integer",paramType = "query"),
            @ApiImplicitParam(name="size",value = "每页大小",required = false,dataType = "Integer",paramType = "query"),
    } )
    @GetMapping
    public Response getUserByPage(UserPageable userPageable){
        return userService.getUserByPage(userPageable);
    }

    // 根据Id查询用户的信息
    @ApiOperation(value = "用户查询",notes ="用户查询")
    @ApiImplicitParam(name = "id",value = "id",required = true
            ,dataType = "Long",paramType = "path")
    @GetMapping(value = "/{id}")
    public Response getUserById(@PathVariable Long id) {
        return Response.success().data("data",userService.getUserById(id));
    }

    //添加用户的接口
    @ApiOperation(value = "添加用户",notes = "添加用户")
    @ApiImplicitParam(name="request",value = "新增用户参数",required = true,dataType = "UserCreateRequest",paramType = "body")
    @PostMapping
    public Response createUser(@RequestBody UserCreateRequest request){
        return userService.save(request);
    }

    //根据ID删除用户的接口
    @ApiOperation(value = "根据ID删除用户",notes = "根据ID删除用户")
    @ApiImplicitParam(name ="id",value = "id",required = true,dataType = "Long",paramType = "path")
    @DeleteMapping(value = "/{id}")
    public Response deleteUserById(@PathVariable Long id){

        return userService.deleteUserById(id);
    }

    //修改用户的接口
    @ApiOperation(value = "修改用户")
    @ApiImplicitParam(name = "request",value = "修改用户的参数",required = true,dataType = "UserUpdateRequest",paramType = "body")
    @PutMapping(value = "/{id}")
    public Response updateUser(@RequestBody UserUpdateRequest request , @PathVariable Long id){
        return userService.updateUser(request,id);
    }

    //用户登陆的接口
    @ApiOperation(value = "用户登陆",notes = "用户登陆")
    @ApiImplicitParam(name="request",value = "用户登陆的参数",required = true,dataType = "UserLoginRequest",paramType = "body")
    @PostMapping(value = "/login")
    public Response Login(@RequestBody UserLoginRequest request){
       User user  =  userService.login(request);
       if(user != null){
           return Response.fail().data("token",TokenUtil.getToken());
       }
        return Response.success().data("token",null);
    }

}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,539评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,594评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,871评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,963评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,984评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,763评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,468评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,357评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,850评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,002评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,144评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,823评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,483评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,026评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,150评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,415评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,092评论 2 355

推荐阅读更多精彩内容

  • 介绍 什么是Swagger Swagger是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风...
    TurboSnail阅读 3,044评论 0 4
  • 简介 Swagger 是最流行的 API 开发工具,它遵循 OpenAPI Specification(OpenA...
    LittleJessy阅读 32,010评论 0 15
  • 在软件开发行业,管理文档是件头疼的事。不是文档难于撰写,而是文档难于维护,因为需求与代码会经常变动,尤其在采用敏捷...
    杨梅泡酒阅读 46,262评论 12 56
  • 今天文案学习的打卡作业是一份推销自己的自我介绍。自听完课到拿来作业,我一直都在思考——“卖点”“亮点”。像我这样一...
    婆妈读书阅读 197评论 0 1
  • 5. 气势汹汹拉开大门,水瓶不负众望的被绊倒了。剩下11个拿着乱七八糟东西的星座惊恐的看着水瓶……前面的又一扇...
    埙与陶笛阅读 660评论 0 3