Swagger3快速入门

2023-10-27


号称世界上最流行的API框架

  • Restful Api 文档在线自动生成器 => API 文档 与API 定义同步更新

  • 直接运行,在线测试API

  • 支持多种语言 (如:Java,PHP等)

  • 官网:https://swagger.io/

快速入门SpringBoot集成Swagger

依赖

swagger3依赖

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


但是我实际使用的时候总是有各种报错,如果有请把版本降2.9.2

<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>

配置类-SwaggerConfig

@Configuration
@EnableSwagger2 //开启swagger
public class SwaggerConfig {
}

访问

http://localhost:8080/swagger-ui/index.html

在这里插入图片描述

配置Swagger

Swagger实例Bean是Docket,所以通过配置Docket实例来配置Swaggger

//配置了Swagger的Docket的bean实例
    @Bean
    public Docket docket(){
        return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo());
    }

可以通过apiInfo()属性配置文档信息

//配置文档信息
private ApiInfo apiInfo() {
   Contact contact = new Contact("联系人名字", "http://xxx.xxx.com/联系人访问链接", "联系人邮箱");
   return new ApiInfo(
           "标题", // 标题
           "描述", // 描述
           "v1.0", // 版本
           "http://terms.service.url/组织链接", // 组织链接
           contact, // 联系人信息
           "Apach 2.0 许可", // 许可
           "许可链接", // 许可连接
           new ArrayList<>()// 扩展
  );
}

完整版

package com.blb.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.service.VendorExtension;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

import java.util.ArrayList;

@Configuration
@EnableSwagger2 //开启swagger
public class SwaggerConfig {

    //配置了Swagger的Docket的bean实例
    @Bean
    public Docket docket(){
        return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo());
    }

    private  ApiInfo apiInfo(){
        Contact contact=new Contact("dyk","https://blog.csdn.net/qq_44866153","1106649325@qq.com");
        return new ApiInfo(
                "dyk的swagger文档",
                "我的 API文档",
                "v1.0",
                "https://blog.csdn.net/qq_44866153",
                contact,
                "Apache 2.0",
                "http://www.apache.org/licenses/LICENSE-2.0",
                new ArrayList<>()


        );
    }
}


方法名 描述
select 获取Docket中的选择器,返回apiSelectorBuilder构造选择器
apis(RequestHandlerSelectors.basePackage(“com.blb.controller”)) 设定扫描那个包(包含子包)
package com.blb.config;

import org.springframework.boot.autoconfigure.info.ProjectInfoProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
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.service.VendorExtension;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

import java.util.ArrayList;

@Configuration
@EnableSwagger2 //开启swagger
public class SwaggerConfig {

    //配置了Swagger的Docket的bean实例
    @Bean
    public Docket docket(){
        return new Docket(DocumentationType.SWAGGER_2)
                .select()//获取Docket中的选择器,返回apiSelectorBuilder构造选择器 如扫描什么包的注解
                .apis(RequestHandlerSelectors.basePackage("com.blb.controller"))//设定扫描那个包(包含子包)
                .paths(PathSelectors.any())
                .build().apiInfo(apiInfo2());
    }

    private  ApiInfo apiInfo(){
        Contact contact=new Contact("dyk","https://blog.csdn.net/qq_44866153","1106649325@qq.com");
        return new ApiInfo(
                "dyk的swagger文档",
                "我的 API文档",
                "v1.0",
                "https://blog.csdn.net/qq_44866153",
                contact,
                "Apache 2.0",
                "http://www.apache.org/licenses/LICENSE-2.0",
                new ArrayList<>()


        );
    }

    private ApiInfo apiInfo2(){

        return new ApiInfoBuilder()
                .title("dyk的swagger文档")
                .description("我的 API文档")
                .version("v1.0")
                .contact(new Contact("dyk","https://blog.csdn.net/qq_44866153","1106649325@qq.com"))
                .license("Apache 2.0")
                .licenseUrl("http://www.apache.org/licenses/LICENSE-2.0")
                .build();
    }
}

访问

http://localhost:8080/swagger-ui/index.html

在这里插入图片描述

controller

package com.blb.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {

    @RequestMapping("/hello")
    public String hello(){
        return "hello";
    }
}

测试接口

在这里插入图片描述

正则表达式设置路径范围

controller没加@RequestMapping("/swagger")时

package com.blb.config;

import com.blb.annotation.MySwaggerAnnotation;


import com.google.common.base.Predicates;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
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 static springfox.documentation.builders.RequestHandlerSelectors.withMethodAnnotation;

@Configuration
@EnableSwagger2 //开启swagger
public class SwaggerConfig {

    //配置了Swagger的Docket的bean实例
    @Bean
    public Docket docket(){
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(Predicates.not(//not取反
                        withMethodAnnotation(MySwaggerAnnotation.class)))  //方法上有MySwaggerAnnotation注解时返回true
                .apis(RequestHandlerSelectors.basePackage("com.blb.controller"))
                .paths(PathSelectors.regex("/swagger/.*"))//使用正则表达式,约束生成api文档的路径
                .build().apiInfo(apiInfo2());
    }

    private  ApiInfo apiInfo(){
        Contact contact=new Contact("dyk","https://blog.csdn.net/qq_44866153","1106649325@qq.com");
        return new ApiInfo(
                "dyk的swagger文档",
                "我的 API文档",
                "v1.0",
                "https://blog.csdn.net/qq_44866153",
                contact,
                "Apache 2.0",
                "http://www.apache.org/licenses/LICENSE-2.0",
                new ArrayList<>()


        );
    }

    private ApiInfo apiInfo2(){

        return new ApiInfoBuilder()
                .title("dyk的swagger文档")
                .description("我的 API文档")
                .version("v1.0")
                .contact(new Contact("dyk","https://blog.csdn.net/qq_44866153","1106649325@qq.com"))
                .license("Apache 2.0")
                .licenseUrl("http://www.apache.org/licenses/LICENSE-2.0")
                .build();
    }
}

在这里插入图片描述
加了@RequestMapping("/swagger")后
在这里插入图片描述

多个规则

package com.blb.config;

import com.blb.annotation.MySwaggerAnnotation;


import com.google.common.base.Predicates;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
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 static springfox.documentation.builders.RequestHandlerSelectors.withMethodAnnotation;

@Configuration
@EnableSwagger2 //开启swagger
public class SwaggerConfig {

    //配置了Swagger的Docket的bean实例
    @Bean
    public Docket docket(){
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(Predicates.not(//not取反
                        withMethodAnnotation(MySwaggerAnnotation.class)))  //方法上有MySwaggerAnnotation注解时返回true
                .apis(RequestHandlerSelectors.basePackage("com.blb.controller"))
                .paths(
                        Predicates.or(//多个规则符合任意一个即可通过
                                PathSelectors.regex("/swagger/.*"),
                                PathSelectors.regex("/swagger2/.*"),
                                PathSelectors.regex("/.*")
                        )

                        )//使用正则表达式,约束生成api文档的路径

                .build().apiInfo(apiInfo2());
    }

    private  ApiInfo apiInfo(){
        Contact contact=new Contact("dyk","https://blog.csdn.net/qq_44866153","1106649325@qq.com");
        return new ApiInfo(
                "dyk的swagger文档",
                "我的 API文档",
                "v1.0",
                "https://blog.csdn.net/qq_44866153",
                contact,
                "Apache 2.0",
                "http://www.apache.org/licenses/LICENSE-2.0",
                new ArrayList<>()


        );
    }

    private ApiInfo apiInfo2(){

        return new ApiInfoBuilder()
                .title("dyk的swagger文档")
                .description("我的 API文档")
                .version("v1.0")
                .contact(new Contact("dyk","https://blog.csdn.net/qq_44866153","1106649325@qq.com"))
                .license("Apache 2.0")
                .licenseUrl("http://www.apache.org/licenses/LICENSE-2.0")
                .build();
    }
}

swagger的注解

@Api

作用:用来指定接口的描述文字
修饰范围: 作用在类上
参数
value:是详细描述
tags: 是标题

@RestController
@Api(tags = "测试服务的接口描述")
public class TestController {

    @RequestMapping("/hello")
    public String hello(){
        return "hello";
    }
}

在这里插入图片描述

@ApiOperation()

作用:用来对接口中具体的方法做描述
修饰范围:作用在方法上

@RequestMapping("/findAll")
    @ApiOperation(value = "查询所有用户接口",

    notes = "<span style='color:red;'>描述:</span>&nbsp;用来查询所有用户信息的接口")
    public Map<String,Object> findAll(){
        Map<String,Object> map=new HashMap<>();
        map.put("success","查询成功");
        map.put("state",true);
        return map;
    }

在这里插入图片描述

value:用来对接口的说明
notes:用来对接口的详细描述

@ApiImplicitParams

作用:用来接口中的参数进行说明
修饰范围:作用在方法上

@PostMapping("/save")
    @ApiOperation(value = "保存用户信息接口",notes = "<span style='color:red;'>描述:</span>&nbsp;用来保存用户信息的接口")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "id",value = "用户id",dataType = "String",defaultValue ="1"),
            @ApiImplicitParam(name = "name",value = "用户姓名",dataType = "String",defaultValue ="dyk")
    })
    public Map<String,Object> save(String id,String name){
        Map<String,Object> map=new HashMap<>();
        map.put("success","查询成功");
        map.put("state",true);
        return map;
    }

在这里插入图片描述
可以看到它还是以?后面拼接参数的方式传递的参数,

rest风格

@PostMapping("/save/{id}/{name}")
    @ApiOperation(value = "保存用户信息接口",notes = "<span style='color:red;'>描述:</span>&nbsp;用来保存用户信息的接口")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "id",value = "用户id",dataType = "String",defaultValue ="1",paramType = "path"),
            @ApiImplicitParam(name = "name",value = "用户姓名",dataType = "String",defaultValue ="dyk",paramType = "path")
    })
    public Map<String,Object> save(@PathVariable("id") String id, @PathVariable("name") String name){
        Map<String,Object> map=new HashMap<>();
        map.put("success","查询成功");
        map.put("state",true);
        return map;
    }

在这里插入图片描述

@ApiResponses

作用:用于请求方法上,表示一组响应
修饰范围:作用在方法上

@ApiResponses({
            @ApiResponse(code=400,message = "参数有问题"),
            @ApiResponse(code = 404,message = "请求页面路径或跳转路径不正确"),
            @ApiResponse(code = 200,message = "添加用户成功")
    })
    public Map<String,Object> save(@PathVariable("id") String id, @PathVariable("name") String name){
        Map<String,Object> map=new HashMap<>();
        map.put("success","查询成功");
        map.put("state",true);
        return map;
    }

在这里插入图片描述

@ApiIgnore

忽略,当前注解描述的方法或者类型不生成api帮助文档

@ApiModel

描述一个实体类型,这个实体类型如果成为任何一个生成api帮助文档的方法
返回值类型的时候,次注解被解析

package com.blb.entity;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;

@ApiModel(value = "User",description = "User实体类")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User implements Serializable {
    @ApiModelProperty(value = "主键",name = "主键id",required = false,example = "1",hidden = false)
        private  String id;
    @ApiModelProperty(value = "姓名",name = "姓名name",required = true,example = "dyk",hidden = false)
        private  String name;
    @ApiModelProperty(value = "密码",name = "密码password",required = true,example = "123",hidden = false)
        private String password;
}

controller

@RequestMapping("/getUser")
    public User User(){
        return  new User();
    }

在这里插入图片描述

自定义注解

让controller里的方法不显示在swaggerui里面

由于3.0的import com.google.common.base.Predicates;这个包一直导不进去我又换成2.9.2

swagger2访问

http://localhost:8080/swagger-ui.html

注解定义

package com.blb.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @target() 描述当前的注解可以定义在什么资源上
 * 属性value
 *   定义具体的资源 包括:
 *  ElementType.METHOD 可以定义在方法上
 *  ElementType.TYPE  可以定义在类上
 *  ElementType.FIELD  可以定义在属性上
 *  ElementType.PARAMETER 可以定义在方法参数上
 *
 *
 * @Retention  当前注解在什么时候有效
 * 属性value
 * -  定义具体的生效标记
 *   RetentionPolicy.RUNTIME  运行时有效
 *   RetentionPolicy.SOURCE    源码中有效
 *   RetentionPolicy.CLASS     字节码有效
 */
@Target(value = {ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME )
public @interface MySwaggerAnnotation {

    //自定义注解中的属性,相当于@MySwaggerAnnotation(value="")

    String value() default "";
}

配置

package com.blb.config;

import com.blb.annotation.MySwaggerAnnotation;


import com.google.common.base.Predicates;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
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 static springfox.documentation.builders.RequestHandlerSelectors.withMethodAnnotation;

@Configuration
@EnableSwagger2 //开启swagger
public class SwaggerConfig {

    //配置了Swagger的Docket的bean实例
    @Bean
    public Docket docket(){
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(Predicates.not(//not取反
                        withMethodAnnotation(MySwaggerAnnotation.class)))  //方法上有MySwaggerAnnotation注解时返回true
                .apis(RequestHandlerSelectors.basePackage("com.blb.controller"))
                .paths(PathSelectors.any())
                .build().apiInfo(apiInfo2());
    }

    private  ApiInfo apiInfo(){
        Contact contact=new Contact("dyk","https://blog.csdn.net/qq_44866153","1106649325@qq.com");
        return new ApiInfo(
                "dyk的swagger文档",
                "我的 API文档",
                "v1.0",
                "https://blog.csdn.net/qq_44866153",
                contact,
                "Apache 2.0",
                "http://www.apache.org/licenses/LICENSE-2.0",
                new ArrayList<>()


        );
    }

    private ApiInfo apiInfo2(){

        return new ApiInfoBuilder()
                .title("dyk的swagger文档")
                .description("我的 API文档")
                .version("v1.0")
                .contact(new Contact("dyk","https://blog.csdn.net/qq_44866153","1106649325@qq.com"))
                .license("Apache 2.0")
                .licenseUrl("http://www.apache.org/licenses/LICENSE-2.0")
                .build();
    }
}

controller加上自定义注解

package com.blb.controller;

import com.blb.annotation.MySwaggerAnnotation;
import io.swagger.annotations.*;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.Map;

@RestController
@Api(tags = "用户服务的接口描述")
public class TestController {

   @MySwaggerAnnotation
    @RequestMapping("/hello")
    public String hello(){
        return "hello";
    }


    @RequestMapping("/findAll")
    @ApiOperation(value = "查询所有用户接口",

    notes = "<span style='color:red;'>描述:</span>&nbsp;用来查询所有用户信息的接口")
    public Map<String,Object> findAll(){
        Map<String,Object> map=new HashMap<>();
        map.put("success","查询成功");
        map.put("state",true);
        return map;
    }

    @PostMapping("/save/{id}/{name}")
    @ApiOperation(value = "保存用户信息接口",notes = "<span style='color:red;'>描述:</span>&nbsp;用来保存用户信息的接口")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "id",value = "用户id",dataType = "String",defaultValue ="1",paramType = "path"),
            @ApiImplicitParam(name = "name",value = "用户姓名",dataType = "String",defaultValue ="dyk",paramType = "path")
    })

    @ApiResponses({
            @ApiResponse(code=400,message = "参数有问题"),
            @ApiResponse(code = 404,message = "请求页面路径或跳转路径不正确"),
            @ApiResponse(code = 200,message = "添加用户成功")
    })
    public Map<String,Object> save(@PathVariable("id") String id, @PathVariable("name") String name){
        Map<String,Object> map=new HashMap<>();
        map.put("success","查询成功");
        map.put("state",true);
        return map;
    }
}

在这里插入图片描述
可以看到默认忽略了hello 因为我在对应的controller方法上面加了自定义注解

美化swagger的插件

导入依赖

		<dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>swagger-bootstrap-ui</artifactId>
            <version>1.9.6</version>
        </dependency>

访问

http://localhost:8080/doc.html

在这里插入图片描述
页面变得好看些了也变的方便些了

调式功能

在这里插入图片描述

注意

实际使用如果一输入ip地址发现报错java.lang.NumberFormatException: For input string: ""那就是@ApiModelProperty(value = “员工id”,example = “1”)要加入example属性,这也是实际使用时发现的问题,然后swagger3也是有一些报错暂时也没找到为什么,所有还是尽量使用swagger2,没有那么多错

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Swagger3快速入门 的相关文章

  • Java:在 eclipse 中导出到 .jar 文件

    我正在尝试将 Eclipse 中的程序导出到 jar 文件 在我的项目中 我添加了一些图片和 PDF s 当我导出到 jar 文件时 似乎只有main已编译并导出 我的意愿是如果可能的话将所有内容导出到 jar 文件 因为这样我想将其转换为
  • Spring RestTemplate 使用 cookie 遵循重定向

    最近我遇到了一个问题 我需要做一个GET请求远程服务 我假设使用一个简单的 servlet 并且 RestTemplate 返回Too many redirects 经过一番调查 似乎对指定远程服务发出的第一个请求实际上只是一个 302 重
  • Spring Data JPA 选择不同

    我有一个情况 我需要建立一个select distinct a address from Person a 其中地址是 Person 内的地址实体 类型的查询 我正在使用规范动态构建我的 where 子句并使用findAll Specifi
  • 在 Wildfly 中与 war 部署共享 util jar 文件

    假设我有一个名为 util jar 的 jar 文件 该 jar 文件主要包含 JPA 实体和一些 util 类 无 EJB 如何使这个 jar 可用于 Wildfly 中部署的所有 war 无需将 jar 放置在 war 的 WEB IN
  • 是否可以使用 Flying Saucer (XHTML-Renderer) 将 css 解析为类路径资源?

    我正在尝试将资源打包到 jar 中 但我无法让 Flying Saucer 在类路径上找到 css 我无法轻松构建 URL 来无缝解决此问题 https stackoverflow com questions 861500 url to l
  • 如何将 Mat (opencv) 转换为 INDArray (DL4J)?

    我希望任何人都可以帮助我解决这个任务 我正在处理一些图像分类并尝试将 OpenCv 3 2 0 和 DL4J 结合起来 我知道DL4J也包含Opencv 但我认为它没什么用 谁能帮我 如何转换成 INDArray 我尝试阅读一些问题here
  • 如何在代理后面安装 Eclipse Neon

    对于 Neon Eclipse 附带了一个安装程序 我在安装程序中找不到任何配置菜单 我的java版本是 java version java version 1 8 0 72 Java TM SE Runtime Environment b
  • 如何根据运行的 jar 的结果让我的 ant 任务通过或失败?

    我正在运行 CrossCheck 无浏览器 js 单元测试 作为 ant 脚本的一部分 如果 CrossCheck 测试失败 我希望 ant 报告失败 这是 build xml 中的相关部分
  • ConcurrentHashMap 内部是如何工作的?

    我正在阅读有关 Java 并发性的 Oracle 官方文档 我想知道Collection由返回 public static
  • 在另一个模块中使用自定义 gradle 插件模块

    我正在开发一个自定义插件 我希望能够在稍后阶段将其部署到存储库 因此我为其创建了一个独立的模块 在对其进行任何正式的 TDD 之前 我想手动进行某些探索性测试 因此 我创建了一个使用给定插件的演示模块 到目前为止 我发现执行此操作的唯一方法
  • 了解joda时间PeriodFormatter

    我以为我明白了 但显然我不明白 你能帮我通过这些单元测试吗 Test public void second assertEquals 00 00 01 OurDateTimeFormatter format 1000 Test public
  • QuerySyntaxException:无法找到类

    我正在使用 hql 生成 JunctionManagementListDto 类的实际 Java 对象 但我最终在控制台上出现以下异常 org hibernate hql internal ast QuerySyntaxException
  • Docker 和 Eureka 与 Spring Boot 无法注册客户端

    我有一个使用 Spring Boot Docker Compose Eureka 的非常简单的演示 我的服务器在端口 8671 上运行 具有以下应用程序属性 server port 8761 eureka instance prefer i
  • java库维护数据库结构

    我的应用程序一直在开发 所以偶尔 当版本升级时 需要创建 更改 删除一些表 修改一些数据等 通常需要执行一些sql代码 是否有一个 Java 库可用于使我的数据库结构保持最新 通过分析类似 db structure version 信息并执
  • 使用布尔值进行冒泡排序以确定数组是否已排序

    我有以下用于冒泡排序的代码 但它根本不排序 如果我删除布尔值那么它工作正常 我知道 由于我的 a 0 小于所有其他元素 因此没有执行交换 任何人都可以帮助我解决这个问题 package com sample public class Bub
  • Hamcrest Matchers - 断言列表类型

    问题 我目前正在尝试使用 Hamcrest Matchers 来断言返回的列表类型是特定类型 例如 假设我的服务调用返回以下列表 List
  • Resteasy 可以查看 JAX-RS 方法的参数类型吗?

    我们使用 Resteasy 3 0 9 作为 JAX RS Web 服务 最近切换到 3 0 19 我们开始看到很多RESTEASY002142 Multiple resource methods match request警告 例如 我们
  • OpenCSV:将嵌套 Bean 映射到 CSV 文件

    我正在尝试将 bean 映射到 CSV 文件 但问题是我的 bean 具有其他嵌套 bean 作为属性 所发生的情况是 OpenCSV 遍历属性找到一个 bean 然后进入其中并映射该 bean 内的所有数据 如果找到另一个 bean 它就
  • 洪水填充优化:尝试使用队列

    我正在尝试创建一种填充方法 该方法采用用户指定的初始坐标 检查字符 然后根据需要更改它 这样做之后 它会检查相邻的方块并重复该过程 经过一番研究 我遇到了洪水填充算法并尝试了该算法 它可以工作 但无法满足我对 250 x 250 个字符的数
  • 在java中使用多个bufferedImage

    我正在 java 小程序中制作游戏 并且正在尝试优化我的代码以减少闪烁 我已经实现了双缓冲 因此我尝试使用另一个 BufferedImage 来存储不改变的游戏背景元素的图片 这是我的代码的相关部分 public class QuizApp

随机推荐

  • html p怎么设置空两格,【总结】怎样在

    标签内显示空格——空格实体

    一般在 标签中 无论文字间有几个空格都只会显示一个 若需显示多个 则需用到html中的几种空格实体 即不换行空格 全称No Break Space 是最常见且使用最多的空格 HTML字符值引用为 宽度受字体影响明显而强烈 即 半角空格 全称
  • 解决复制粘贴出现的错误

    proc2 c 49 5 错误 程序中有游离的 240 proc2 c 49 5 错误 程序中有游离的 302 proc2 c 49 5 错误 程序中有游离的 240 proc2 c 49 5 错误 程序中有游离的 302 proc2 c
  • 2022年度笔记本十大热门品牌销量排行榜

    近年来 由于大环境的改变 线上教育 线上办公等的需求使得平板电脑出货量逐步提升 同时 5G时代来临 万物互联是未来的趋势 手机由于操作系统和交互上的局限性 笔记本电脑将会扮演更加重要的角色 未来 整个笔记本电脑行业的空间有望进一步打开 根据
  • 数据结构代码——折半插入排序

    折半插入排序的算法思想可以参考王道数据结构的书 建议先看书或者通过B站学习相关课程了解算法思想后再看代码 代码 define CRT SECURE NO WARNINGS 1 define ElemType int include
  • 什么是Token(令牌)

    Acess Token 访问资源接口 API 时所需要的资源凭证 简单token 的组成 uid 用户唯一的身份标识 time 当前时间的时间戳 sign 签名 token的前几位以hash算法压缩成的一定长度的16进制字符串 特点 服务端
  • centos7 systemctl 命令详解

    Systemctl 命令简介 定义 systemctl一个系统管理守护进程 工具和库的集合 用于取代System V service和chkconfig命令 功能 systemctl 主要用于查询或发送控制命令给systemd服务 管理单元
  • 执行查看数据库表空间信息报错 ORA-01116、ORA-01110、ORA-27041

    查看剩余表空间大小 SELECT tablespace name 表空间 sum blocks 8192 1000000 剩余空间M FROM dba free space GROUP BY tablespace name ORA 0111
  • Django(8)-静态资源引用CSS和图片

    除了服务端生成的 HTML 以外 网络应用通常需要一些额外的文件 比如图片 脚本和样式表 来帮助渲染网络页面 在 Django 中 我们把这些文件统称为 静态文件 我们使用static文件来存放静态资源 django会在每个 INSTALL
  • pip install 出现Could not install packages due to an EnvironmentError: [WinError 5] 拒绝访问

    pip install U numpy进行更新的时候出现了上述的问题 百度了一下直接在install后面加上 user 就可以了 pip install user upgrade numpy
  • 使用ffmpeg对rtsp视频截图

    ffmpeg i rtsp 192 168 1 64 554 Streaming Channels 1 y f mjpeg t 0 001 s 1280x720 test jpg 使用ffmpeg对摄像头的视频流进行截图 rtsp 192
  • Linux内网环境安装nginx,离线安装nginx教程

    说明 本教程针对内网环境 没有互联网环境 安装nginx 安装前测试 nginx未安装时 无法访问 curl http localhost 80 第一步 请参考教程 本地yum源安装 教程连接如下 https note youdao com
  • IDEA在XML中提示SQL

    首先配置Database 选择数据库类型之后 填写数据库配置 配置完成之后右键表名 mybatis generator生成从controller dao单表的代码 Jump to Query Console跳转到IDEA编写SQL的页面 非
  • Stable Diffusion界面参数及模型使用

    系列文章目录 本地部署Stable Diffusion教程 亲测可以安装成功 谷歌Colab云端部署Stable Diffusion 进行绘图 文章目录 系列文章目录 前言 Stable Diffusion界面参数 一 模型是干什么的 二
  • uniapp引入iconfont图标

    1 iconfont官网下载好图标并解压 2 将以下文件复制到项目中 3 文件在项目中的位置 4 打开iconfont css文件修改 font face 里面的路径 修改为相对路径 static fonts 示例如下 5 在App vue
  • 利用mysql load data秒级别大批量写入数据,建议单次10w+以上~速度远超批量insert,附上完整封装工具

    平时项目中 有时候可能会遇到需要大批量写入数据到mysql数据库中的场景 这时候我们可以利用mysql自带的load data语法 先将数据写入文本文件 再将文件读入数据库 具体用法看下面 1 表结构如下 CREATE TABLE wewo
  • Win10家庭版禁用系统更新方法汇总及问题解决

    这个文章针对没有组策略gpedit msc的win10家庭版 网上有几种方法 我在这里汇总一下 并记录之后遇到的问题及 一 先启用组策略 然后禁止更新 1 启用组策略 win10家庭版是没有组策略gpedit msc的 在电脑任意位置创建一
  • 微软宣布在 Excel 中使用 Python:结合了 Python 的强大功能和 Excel 的灵活性。

    文章目录 Excel 中的 Python 有何独特之处 1 Excel 中的 Python 是为分析师构建的 高级可视化 机器学习 预测分析和预测 数据清理 2 Excel 中的 Python 通过 Anaconda 展示了最好的 Pyth
  • C语言基础系列(三)——链表

    C语言基础系列 三 链表 1 链表的定义 链表是一些包含数据的独立结构体 被称为节点 的集合 1 1 单链表 在单链表中 每个节点包含一个指向链表下一节点的指针 示意图如下 定义的节点结构体声明如下 typedef struct NODE
  • 合宙Air103

    目录 基础资料 探讨重点 实现功能 硬件准备 软件版本 软件使用 初始化硬件i2c 发送指令给AHT10触发测量并读数 状态位说明 读取流程 核心函数注 基础资料 基于Air103开发板 Air103 LuatOS 文档 上手 开发上手 L
  • Swagger3快速入门

    Swagger 快速入门SpringBoot集成Swagger 依赖 配置类 SwaggerConfig 访问 配置Swagger 可以通过apiInfo 属性配置文档信息 完整版 访问 controller 测试接口 正则表达式设置路径范