springboot-swagger

添加pom.xml依赖

<dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-boot-starter</artifactId>
            <version>3.0.0</version>
        </dependency>

配置application.yml

#springboot版本搞需要配置它
spring.mvc.pathmatch.matching-strategy=ant_path_matcher

#-dev.yml
server:
  port: 8081
#Swagger 
#到时候在config类里定义
#@Value("${swagger.enabled}")//获取当前环境ymlswagger.enabled的值付给flag1
#    boolean flag1;  选择是否开启swagger
swagger:
  enabled: true
#-prod.yml
server:
  port: 8082
#Swagger lock
swagger:
  enabled: false

config文件

@Configuration
//@EnableSwagger2//开启 Swagger2 网站swagger-ui/index.html
@EnableOpenApi//开启 Swagger
/*
Swagger的bean实例Docket
 */
//@Profile({"dev","test"}) //判断是否是在dev ,test环境下 ,是开启 Swagger  不需要.enable()  在dev所以下面的类

public class SwaggerCnofig {

    //.enable()配置是否启动swagger false不启动,不能在浏览器访问。默认true
    @Value("${swagger.enabled}")//获取当前环境ymlswagger.enabled的值付给flag1
    boolean flag1;
    //多个Docket  配置多个分组  自己的组配置自己的信息
    @Bean
    public Docket docket2(Environment environment){
        return new Docket(DocumentationType.SWAGGER_2)
                .groupName("A2");
    }
    @Bean
    public Docket docket3(Environment environment){
        return new Docket(DocumentationType.SWAGGER_2)
                .groupName("B3");
    }
    @Bean
    public Docket docket4(Environment environment){
        return new Docket(DocumentationType.SWAGGER_2)
                .groupName("C4");
    }

    //配置swagger的docketd的bean实例
    @Bean
    public Docket docket(Environment environment){
        //获取项目环境 判断是否开启swagger
        //设置要显示的swagger环境  监听dev,test环境
        Profiles profiles=Profiles.of("dev","test");
        //获得一个激活的文件getActiveProfiles
        //监听一个对象getDefaultProfiles
        //?3.0版不用再docket中设置,properties中设置了profile就可以了
        //2.x版用environment.acceptsProfiles这个判断是否处在自己设定的环境当中
        //Boolean b=environment.acceptsProfiles(环境监听变量)
        Boolean flag=environment.acceptsProfiles(profiles);
        //environment.getDefaultProfiles();

        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())//这个是下面我们自己写的

                .groupName("hello,zll!")

                .enable(flag1)//配置是否启动swagger false不启动,不能在浏览器访问。默认true
                .select() //select().apis .build();这是一套
                //RequestHandlerSelectors配置要扫描接口的方式
                // basePackage基于某个包去扫描("com.zll.swagger.controller")
                //any()扫描全部
                //none()不扫描
                //withClassAnnotation()扫描类上的注解 参数是一个注解的反射对象(getMapping.class)
                //withMethodAnnotation()扫描方法上的注解(GetMapping.class)
                //withClassAnnotation(RestController.class)只会去扫描类上有RestController这样的类来生成接口
                .apis(RequestHandlerSelectors.basePackage("com.zll.swagger.controller"))
                //paths()过滤什么路径 ant路径  差不多是过滤除这以外的
                //.paths(PathSelectors.ant("/zll/**"))//只扫描带有zll下的接口请求
                .build();
    }

    //配置swagger信息=》需要apiInfo类
    private ApiInfo apiInfo(){
        //作者信息
        Contact DEFAULT_CONTACT = new Contact("今珂", "http://baidu,com ","1664086110@qq.com");
        //标签
        return  new ApiInfo("今珂 的Api Swagger文档",
                "描述:hello,今珂!!!",
                "版本:1.0", "http://baidu,com",
                DEFAULT_CONTACT, "Apache 2.0",
                "http://www.apache.org/licenses/LICENSE-2.0",
                new ArrayList()
        );
    }
}

控制类controller


@Api(tags="注释:Hello控制类",description = "描述")//tags可以多个值 tags = {"列表1","列表2"}
@RestController
public class HelloController {

    @PostMapping(value="/hello")//@RequestMapping=》get post都可以使用
    public String hello(){
        return "zll,hello!";
    }


    //只要我们的接口中,返回值中存在实体类,他就会被扫描到
    @GetMapping(value="/user")//@RequestMapping=》get post都可以使用
    public User user(){
        return new User();
    }

    @ApiOperation("接口:Hello2方法")//是用在方法上的
    @GetMapping("/hello2")
    public String hello2(@ApiParam("用户名") String username){
        String zll;
        return "hello"+username;
    }

    @ApiOperation("接口:Post测试类")//是用在方法上的
    @PostMapping("/postt")
    public User postt(@ApiParam("User类") User user){ //使用User实体类需要成员为private 否则报错=》Unable to scan documentation context 组名
      // int i=5/0;//除0 swagger页面测试接口会报500错误
        return user;
    }

}

实体类

//需要去Controller中设置接口才可以让swagger扫描
@Data//get set方法
@ApiModel("@ApiModel文档注释:用户实体类 User")//使用在类上,表示对类进行说明 -description=( 描述)
public class User {
    @ApiModelProperty("使用在方法,字段上注释:用户名")
    /*
    value–字段说明
    name–重写属性名字
    dataType–重写属性类型
    required–是否必填
    example–举例说明
    hidden–隐藏
    */
    private  String name; //public不需要get set方法就可以扫描到
    @ApiModelProperty(value = "密码")
    private String password; //private 需要加get set方法才可以被扫描到

    /*@ApiParam()去控制类的接口方法里的参数字段注释
使用在方法上或者参数上,字段说明;表示对参数的添加元数据(说明或是否必填等)
name–参数名
value–参数说明
required–是否必填
 */

    /*
@ApiOperation() 去控制类的接口方法上注释
使用于在方法上,表示一个http请求的操作
源码中属性太多,记几个比较常用
value用于方法描述
notes用于提示内容
tags可以重新分组(视情况而用)
 */

}
posted @   衿柯  阅读(51)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示