Swagger的基本配置

287 阅读3分钟

f83d0be5a8985b7ca2c3fcfd2494f8f6.jpg

1.Swagger配置(基于java配置方式)

 @Configuration
 @EnableSwagger2
 public class SwaggerConfig {
     /*swagger会帮助我们生成接口文档
     * 1.配置生成的文档信息
     * 2.配置生成规则
     * */
 ​
     /**
      *   Docket封装接口文档信息
     */
     @Bean
     public Docket getDocket(){
         //指定文档风格
         Docket docket = new Docket(DocumentationType.SWAGGER_2);
         ApiInfoBuilder apiInfoBuilder = new ApiInfoBuilder();
         apiInfoBuilder.title("商城后端接口说明")
                 .description("描述了后端接口规范。。。")
                 .version("v2.0.1")
                 .contact(new Contact("LZB","www.lzb.com","1875981861@qq.com"));
         ApiInfo apiInfo = apiInfoBuilder.build();
         //指定生成文档的封面信息:文档标题、版本、作者
         docket.apiInfo(apiInfo)
                 .select()
                 .apis(RequestHandlerSelectors.basePackage("com.lzb.bemall.controller"))
                 .paths(PathSelectors.any())
                 .build();
         return docket;
     }
 ​
 }
  • 测试:

    • 启动Springboot应用,访问http://localhost:8080/swagger-ui.html

1.1 Swagger注解说明

swagger提供了一套注解,可以对每个接口进行详细的说明

  1. @Api 类注解,在控制器类添加此注解,可以对控制器类进行功能的说明
  2. @ApiOperation方法注解,在方法上添加此注解,可以对其方法进行功能说明
  3. @ApiImplicitParams,对所需的参数进行详细的说明

示例

 @Controller
 @ResponseBody
 @RequestMapping("/user")
 @Api(value = "提供用户登录和注册的接口",tags = "用户管理")
 public class UserController {
 ​
     @Resource
     private UserService userService;
 ​
     @ApiOperation("用户登录接口")
     @ApiImplicitParams({
             @ApiImplicitParam(paramType = "String",name = "username",value ="用户登录账号",required = true),
             @ApiImplicitParam(paramType = "String",name = "password",value ="用户登录密码",required = false,defaultValue = "123456")
     })
     @RequestMapping(value = "/login",method = RequestMethod.GET)
      public ResultVo login(@RequestParam("username") String name, @RequestParam(value = "password",defaultValue = "123456") String pwd){
                return userService.checkLogin(name,pwd);
     }
 }

4.@ApiModel和*@ApiModelProperty*当接口参数和返回值为对象类型时,在实体类中添加注解说明

示例:

 @Data
 @NoArgsConstructor
 @AllArgsConstructor
 @ApiModel(value = "用户信息",description = "买家信息")
 public class User {
     @ApiModelProperty(required = false,dataType = "Integer")
     private Integer userId;
     @ApiModelProperty(required = true,dataType = "String",value = "用户账号")
     private String userName;
     @ApiModelProperty(required = true,dataType = "String",value = "用户密码")
     private  String userPassword;
     @ApiModelProperty(required = true,dataType = "String",value = "用户真实姓名")
     private String userRealName;
     @ApiModelProperty(required = true,dataType = "String",value = "用户头像路径")
     private String userImg;
 }

5.@ApiIgnore接口方法注解,添加此注解的方法将不会生成到接口文档中去

1.2 Swagger-ui 插件

  • 导入依赖
 <!-- https://mvnrepository.com/artifact/com.github.xiaoymin/swagger-bootstrap-ui -->
 <dependency>
     <groupId>com.github.xiaoymin</groupId>
     <artifactId>swagger-bootstrap-ui</artifactId>
     <version>1.9.6</version>
 </dependency>
 ​

2 Restful

前后端分离开发的项目中,前后端之间是接口进行请求和响应,后端向前端提供请求时就要向外暴露一个URL;

URL的设计不能随意的,需要遵从一定的设计规范-------Restful

Restful是一种web Api的标准,也就是一种URL设计风格/规范。是使用请求方式来区分操作,而不是用路径。

  • 每一个URL请求路径代表服务器上的唯一资源
 传统的URL设计:
         http://localhost:8080/goods/delete?goodsId=1        商品1
         http://localhost:8080/goods/delete?goodsId=2        商品2
 RESTFUL设计:
         http://localhost:8080/goods/delete/1        商品1
         http://localhost:8080/goods/delete/2        商品2
 @RequestMapping("/delete/{gid}")
     public ResultVo deleteGoods(@PathVariable("gid")int goodsId){
         System.out.println("--------"+goodsId);
         return new ResultVo(1000,"delete success",null);
  • 使用不同的请求方式表示不同的操作

SpringMVc对Restful风格提供了很好的支持,在定义一个借口URL时,可以直接通过

@RequestMapping(value = "/{id}",method = RequestMethod.DELETE) 形式指定请求方式,也可以使用特定请求方式

的注解来设定URL

 @PostMapping("/add")    添加
 @DeleteMapping("/{id}")  删除
 @PutMapping("/{id}")    修改
 @GetMapping("/{id}") 查询

HTTP常用的请求方式

  1. post 添加
  2. get 查询
  3. delete 删除
  4. put 修改
  5. option(预检)
 根据ID删除一个商品
     //http://localhost:8080/goods/1   [delete]
     @RequestMapping(value = "/{id}",method = RequestMethod.DELETE)
     public ResultVo deleteGood(@PathVariable("id")int goodsId) {
         System.out.println("--------" + goodsId);
         return new ResultVo(1000, "delete success", null);
     }
 ​
 根据ID查询一个商品
   //http://localhost:8080/goods/1   [get]
     @RequestMapping(value = "/{id}",method = RequestMethod.GET)
     public ResultVo getGood(@PathVariable("id")int goodsId) {
         System.out.println("--------" + goodsId);
         return new ResultVo(1000, "delete success", null);
     }
 ​
  • 接口响应的资源的表现形式采用json

    • 在每个接口添加*@ResponseBody*注解将返回的对象格式为json
    • 或者直接在控制器类使用*@RestController*注解声明控制器
  • 前端通过无状态的HTTP协议与后端接口进行交互

\