SpringBoot学习要点记录(五)----整合swagger,swagger2注解

一、介绍

swagger是一款API 开发工具,可以根据resutful风格生成接口开发文档,并且支持做测试。

二、使用步骤

1.pom文件

<!--引入swagger-->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.7.0</version>
</dependency>
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.7.0</version>
</dependency>

2.配置类

@Configuration
@EnableSwagger2
public class SwaggerConfig {

    /**
     * 创建API应用
     * apiInfo() 增加API相关信息
     * 通过select()函数返回一个ApiSelectorBuilder实例,用来控制哪些接口暴露给Swagger来展现,
     *
     * @return
     */

    @Bean
    public Docket productApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                //这里用的是ApiOperiation注解的被扫描,也可以添加包扫描
                //.apis(RequestHandlerSelectors.basePackage("com.example.demo.controller"))
                .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
                .paths(PathSelectors.any())
                .build();
    }
    /**
     * 创建该API的基本信息(这些基本信息会展现在文档页面中)
     * 访问地址:http://项目实际地址/swagger-ui.html
     * @return
     */
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("swagger和springBoot整合")
                .description("swagger的API文档")
                .version("1.0")
                .build();
    }
}

3.注解修饰Controller,具体事例见下文
4.访问http://localhost:8080/swagger-ui.html#/,注意修改端口

三、使用示例

说明:测试使用,仅供参考。
实体类:

@Data
public class User {
    private Long id;
    private String username;
    @JsonIgnore
    private String password;
    private String email;
    private Integer age;
    private Boolean enabled;
}

Controller类

@RestController
@Api(tags = "用户接口",description = "UserController描述")
@RequestMapping("/users")
public class UserController {

	@ApiOperation(value = "获取用户列表", notes = "获取所有用户信息")
	@RequestMapping(method = RequestMethod.GET)
	public List<User> getAll() {
		ArrayList<User> users = new ArrayList<>();
		User user1  = new User();
		user1.setUsername("张三");
		User user2  = new User();
		user2.setUsername("李四");
		users.add(user1);
		users.add(user2);
		return users;
	}

	@ApiOperation(value = "获取用户", notes = "根据id获取用户")
	@RequestMapping(value="/{id}",method=RequestMethod.GET)
	@ApiImplicitParams({
			@ApiImplicitParam(name = "id", value = "用户ID",required = true, paramType="path", dataType = "Long")
	})
	@ApiResponses({
		@ApiResponse(code=400,message="请求参数没填好"),
		@ApiResponse(code=404,message="请求路径没有或页面跳转路径不对")
	})
	public User getUser(@PathVariable Long id) {
		User user = new User();
		user.setUsername("张飞");
		return user;
	}

	@ApiOperation(value = "更新用户", notes = "根据id更新用户")
	@RequestMapping(value="/{id}",method=RequestMethod.PUT)
	public String putUser(@PathVariable Long id,  User user) {
		return "success";
	}
	
	@ApiOperation(value = "新增用户", notes = "根据User对象创建用户")
	@RequestMapping(method = RequestMethod.POST)
	public String postUser(User user) {
		return "success";
	}
	
	@ApiOperation(value = "删除用户", notes = "根据id删除用户")
	@RequestMapping(value="/{id}", method=RequestMethod.DELETE)
	public String deleteUser(@PathVariable Long id) {
		return "success";
	}
}

测试网址:http://localhost:8080/swagger-ui.html
在这里插入图片描述
Restful规范
请求方式为以下五种
GET:读取(Read)
POST:新建(Create)
PUT:更新(Update)
PATCH:更新(Update),通常是部分更新
DELETE:删除(Delete)

生产环境禁用swagger方法
方式一:
1.配置类上添加@ConditionalOnProperty(name = “swagger.enable”, havingValue = “true”)
2.application-dev.yml配置文件添加swagger.enable = fasle,开发环境设置为true即可

swagger:
  enable: false

方式二:
在配置类上添加@Profile({“dev”,“test”})
表示只会在开发环境和测试环境才会启用。

四、注解含义

注解说明
@EnableSwagger2作用:开启Swagger注解
位置:Swagger配置类上
参数:无
@Api作用:标识Swagger识别的类
位置:Controller类上
参数:value:值
           tags:分组
           description:描述
@ApiIgnore作用:屏蔽显示某个Controller
位置:Controller类上或方法上(只屏蔽方法)
@ApiOperation作用:标识Swagger识别的方法
位置:方法上
参数:tags:分组(可以将方法划分为一组进行展示,可跨Controller)
           value:描述
           notes:说明(这个是在详情里点开才会展示的)
@ApiImplicitParams作用:用在请求的方法上,表示一组参数说明
位置:方法上
参数:@ApiImplicitParam
@ApiImplicitParam作用:用在@ApiImplicitParams注解中,指定一个请求参数的各个方面
位置:方法上,@ApiImplicitParams注解中
参数:name:参数名
           value:参数的汉字说明、解释
           required:参数是否必须传
           dataType:参数类型,默认String
           paramType:参数放在哪个地方,如path、query、form、header、body
@ApiResponses作用:用作返回值的描述,修饰方法的返回值集合
位置:方法上
参数:@ApiResponse
@ApiResponse作用:一般用于表达一个错误的响应信息
位置:方法上
参数: code:数字,例如400
           message:信息,例如"请求参数没填好"
           response:抛出异常的类
@ApiModel作用:表示一个返回响应数据的信息
位置:类上,一般为响应类
参数:description:描述
@ApiModelProperty作用:描述类的属性
位置:类的属性上
参数:value:值
@JsonIgnore作用:忽略某一字段,不响应
位置:类的属性上

参考:https://blog.csdn.net/jiangyu1013/article/details/83107255

五、测试问题记录

1.问题:“Failed to convert value of type ‘java.lang.String’ to required type ‘java.lang.Long’; nested exception is java.lang.NumberFormatException: For input string: “{id}””,

原因:@ApiImplicitParam没有加paramType=“path”,加上后测试正常

	@ApiOperation(value = "获取用户", notes = "根据id获取用户")
	@RequestMapping(value="/{id}",method=RequestMethod.GET)
	@ApiImplicitParams({
			@ApiImplicitParam(name = "id", value = "用户ID",required = true, paramType="path", dataType = "Long")
	})
	public User getUser(@PathVariable Long id) {
		System.out.println(id);
		User user = new User();
		user.setUsername("张飞");
		return user;
	}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值