springboot 配置swagger

272 阅读2分钟

在pom.xml中添加依赖

<dependency>
    <groupId>com.github.xiaoymin</groupId>
    <artifactId>knife4j-spring-boot-starter</artifactId>
    <version>3.0.3</version>
</dependency>

image.png

在config类中设置配置

package com.example.demo.config;

import com.example.demo.common.JacksonObjectMapper;
import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
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;


/**
 * 前端资源放行配置类
 * */
@Configuration
@Slf4j
@EnableSwagger2
@EnableKnife4j
public class WebMVCConfig extends WebMvcConfigurationSupport {

    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.example.demo.controller"))
                .paths(PathSelectors.any())
                .build();
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("瑞吉外卖")
                .version("1.0")
                .description("瑞吉外卖接口文档")
                .build();
    }

    /**
     * 设置静态资源映射
     * */
    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
        //添加映射
        log.info("映射静态资源开始");
        //
        registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/");
        registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");

    }
}

基本上配置下controller的地址就好了

image.png

静态资源映射

image.png

过滤器放行

没有设置前,需要用户登录才能查看接口信息;设置后,无需登录即可查看。

image.png

浏览器查看

浏览器输入 http://localhost:8080/doc.html 即可查看

image.png

常用注解

注解说明
@Api用在类上,例如Controller,表示对类的说明
@ApiModel用在类上,例如entity、DTO、VO
@ApiModelProperty用在属性上,描述属性信息
@ApiOperation用在方法上,例如controller的方法,说明方法的用途、作用

代码示例

controller

/**  
* 员工管理  
*/  
@RestController  
@RequestMapping("/admin/employee")  
@Slf4j  
@Api(tags = "员工相关接口")  
public class EmployeeController {  
  
@Autowired  
private EmployeeService employeeService;  
@Autowired  
private JwtProperties jwtProperties;  
  
/**  
* 登录  
*  
* @param employeeLoginDTO  
* @return  
*/  
@PostMapping("/login")  
@ApiOperation(value = "员工登录")  
public Result<EmployeeLoginVO> login(@RequestBody EmployeeLoginDTO employeeLoginDTO) {  

    XXX
    
    return Result.success(employeeLoginVO);  
}  
  
/**  
* 退出  
*  
* @return  
*/  
@PostMapping("/logout")  
@ApiOperation("员工退出")  
public Result<String> logout() {  

    return Result.success();  
}  
  
/**  
* 新增员工  
* @param employeeDTO  
* @return  
*/  
@PostMapping  
@ApiOperation("新增员工")  
public Result save(@RequestBody EmployeeDTO employeeDTO){  
    
    XXX
    
    return Result.success();  
}  
  
/**  
* 员工分页查询  
* @param employeePageQueryDTO  
* @return  
*/  
@GetMapping("/page")  
@ApiOperation("员工分页查询")  
public Result<PageResult> page(EmployeePageQueryDTO employeePageQueryDTO){  

    XXX
    
    return Result.success(pageResult);  
}  
  
/**  
* 启用禁用员工账号  
* @param status  
* @param id  
* @return  
*/  
@PostMapping("/status/{status}")  
@ApiOperation("启用禁用员工账号")  
public Result startOrStop(@PathVariable Integer status,Long id){  

    XXX
    
    return Result.success();  
}  
  
/**  
* 根据id查询员工信息  
* @param id  
* @return  
*/  
@GetMapping("/{id}")  
@ApiOperation("根据id查询员工信息")  
public Result<Employee> getById(@PathVariable Long id){  

    XXX

    return Result.success(employee);  
}  
  
/**  
* 编辑员工信息  
* @param employeeDTO  
* @return  
*/  
@PutMapping  
@ApiOperation("编辑员工信息")  
public Result update(@RequestBody EmployeeDTO employeeDTO){  
    
    XXX
    
    return Result.success();  
    }  
}

image.png

实体类

@Data  
@ApiModel(description = "员工登录时传递的数据模型")  
public class EmployeeLoginDTO implements Serializable {  
  
    @ApiModelProperty("用户名")  
    private String username;  

    @ApiModelProperty("密码")  
    private String password;  
  
}

image.png

请求中附带token

image.png