springboot整合swagger接口文档

本文档介绍了如何在SpringBoot项目中集成Swagger,用于快速生成接口文档。内容包括引入相关依赖,配置Swagger,创建Controller并注解,以及如何访问生成的Swagger UI。示例中展示了BookController的创建和API定义,如创建、修改、删除和获取图书的接口。最后提到了可以通过Shiro或Spring Security进行接口权限配置,并提供了官方文档链接和项目源码地址。

swagger简介:用以编写接口文档,比起传统手动写接口文档更便捷,直观,通过swagger提供的api注解,可自定义配置接口和参数并加以描述。

1、引用依赖

引用swagger的依赖:

(1)springfox-swagger2 是核心依赖。

(2)springfox-swagger-ui 是提供swagger的文档页面的依赖,可通过 /swagger-ui.html来访问。

<dependency>
	<groupId>io.springfox</groupId>
	<artifactId>springfox-swagger2</artifactId>
    <version>2.6.1</version>
</dependency>

<dependency>
	<groupId>io.springfox</groupId>
	<artifactId>springfox-swagger-ui</artifactId>
	<version>2.6.1</version>
</dependency>       

2、swagger配置

下面两个方法使用到了建造者模式,用于配置swagger。

(1)apiInfo() 是配置swagger-ui.html的页面。

(2)createRestApi()以bean的方式注入到springboot中,其中配置中需要扫描配置控制层(接口)的包,我这里是 com.shiyouao.swagger.controller。

@Configuration
@EnableSwagger2
public class Swagger2 {

    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.shiyouao.swagger.controller"))
                .paths(PathSelectors.any())
                .build();
    }
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("springboot利用swagger构建api文档")
                .description("简单优雅的restfun风格,https://blog.youkuaiyun.com/master_02")
                .termsOfServiceUrl("https://blog.youkuaiyun.com/master_02")
                .version("1.0")
                .build();
    }
}

3、创建controller并配置swagger api

3.1 Swagger使用的注解及其说明:

 @Api :用在类上,说明该类的作用。

 @ApiOperation :注解来给API增加方法说明。

 @ApiResponses :用于表示一组响应

 @ApiResponse :用在@ApiResponses中,一般用于表达一个错误的响应信息 
    code:数字,例如400 
    message:信息,例如"请求参数没填好" 
    response:抛出异常的类 

 @ApiModel :描述一个Model的信息(一般用在请求参数无法使用@ApiImplicitParam注解进行描述的时候) 

 @ApiModelProperty :描述一个model的属性

 @ApiImplicitParams : 用在方法上包含一组参数说明。

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

3.2 示例 BookController接口说明:

 用户创建某本图书 POST /books/

 用户修改对某本图书 PUT /books/:id/

 用户删除对某本图书 DELETE /books/:id/

 用户获取所有的图书 GET /books

用户获取某一图书 GET /Books/:id

@RestController
@RequestMapping(value = "/books")
public class BookController {

    Map<Long, Book> books = Collections.synchronizedMap(new HashMap<Long, Book>());

    /**
     * Conntroller中定义的方法必须在@RequestMapper中显示的指定RequestMethod类型,
     * 否则SawggerUi会默认为全类型皆可访问, API列表中会生成多条项目。
     * @return
     */
    @ApiOperation(value="获取图书列表", notes="获取图书列表")
    @RequestMapping(value={"/getBook"}, method= RequestMethod.GET)
    public List<Book> getBook() {
        List<Book> book = new ArrayList<>(books.values());
        return book;
    }

    /**
     *
     * @param book
     * @return
     */
    @ApiOperation(value="创建图书", notes="创建图书")
    @ApiImplicitParam(name = "book", value = "图书详细实体", required = true, dataType = "Book")
    @RequestMapping(value="", method=RequestMethod.POST)
    public String postBook(@RequestBody Book book) {
        books.put(book.getId(), book);
        return "success";
    }

    /**
     * paramType会直接影响程序的运行期,如果paramType与方法参数获取使用的注解不一致,会直接影响到参数的接收。
     * @param id
     * @return
     */
    @ApiOperation(value="获图书细信息", notes="根据url的id来获取详细信息")
    @ApiImplicitParam(name = "id", value = "ID", required = true, dataType = "Long",paramType = "path")
    @RequestMapping(value="/{id}", method=RequestMethod.GET)
    public Book getBook(@PathVariable Long id) {
        return books.get(id);
    }

    @ApiOperation(value="更新信息", notes="根据url的id来指定更新图书信息")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "id", value = "图书ID", required = true, dataType = "Long",paramType = "path"),
            @ApiImplicitParam(name = "book", value = "图书实体book", required = true, dataType = "Book")
    })
    @RequestMapping(value="/{id}", method= RequestMethod.PUT)
    public String putUser(@PathVariable Long id, @RequestBody Book book) {
        Book book1 = books.get(id);
        book1.setName(book.getName());
        book1.setPrice(book.getPrice());
        books.put(id, book1);
        return "success";
    }
    @ApiOperation(value="删除图书", notes="根据url的id来指定删除图书")
    @ApiImplicitParam(name = "id", value = "图书ID", required = true, dataType = "Long",paramType = "path")
    @RequestMapping(value="/{id}", method=RequestMethod.DELETE)
    public String deleteUser(@PathVariable Long id) {
        books.remove(id);
        return "success";
    }

    /**
     *  使用 @ApiIgnore注解忽略这个API
     * @return
     */
    @ApiIgnore
    @RequestMapping(value = "/hi", method = RequestMethod.GET)
    public String  jsonTest() {
        return " hi you!";
    }
}

 

 

4、访问 /swagger-ui.html

根据项目配置的项目地址访问 http://localhost:8888/swagger/swagger-ui.html#/

拓展:可整合shiro、spring security安全框架来配置接口访问的权限,后续完善。

 

swagger官方文档:http://swagger.io/docs/specification/api-host-and-base-path/

项目代码:https://github.com/Number19/springboot-swagger.git

### Spring Boot 整合 Swagger2 构建 API 文档 #### 添加依赖项 为了使Spring Boot应用程序能够支持Swagger2,需在`pom.xml`文件中加入相应的Maven依赖: ```xml <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> ``` 上述配置引入了用于创建API文档以及提供UI界面展示这些文档所需的库[^1]。 #### 配置Swagger Bean 接着,在项目的配置类里定义一个Docket类型的Bean来定制化Swagger的行为模式。这一步骤对于暴露哪些控制器方法被纳入到最终生成的API描述至关重要。 ```java import org.springframework.context.annotation.Bean; import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; @Configuration public class SwaggerConfig { @Bean public Docket api() { return new Docket(DocumentationType.SWAGGER_2) .select() .apis(RequestHandlerSelectors.basePackage("com.example.demo.controller")) .paths(PathSelectors.any()) .build(); } } ``` 此段代码通过指定包路径筛选出目标Controller组件并将其公开给Swagger处理程序[^2]。 访问地址通常设置为http://localhost:8080/swagger-ui.html (假设应用运行于本地默认端口),在这里可以查看自动生成的RESTful服务接口列表及其详情说明页面[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值