spring整合Swagger

Spring整合Swagger

1.我这里使用的spring版本是4.1.2.RELEASE

2.导入Swagger的maven依赖

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.6.1</version>
</dependency>
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.6.1</version>
</dependency>

3.配置Swagger

@EnableWebMvc
@EnableSwagger2
@Configuration
public class SwaggerConfig {
    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                //扫描包,如果配置错误swagger页面会出现No operations defined in spec!
                .apis(RequestHandlerSelectors.basePackage("com.xxx.controller"))
                .paths(PathSelectors.any())
                .build();
    }
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("标题")//大标题
                .description("描述")//小标题
                .contact(new Contact("姓名","主页","邮箱"))
                .version("1.1.0")
                .build();
    }
}

4.配置spring-servlet.xml(就是mvc的配置文件)

<mvc:resources mapping="/swagger/**" location="/WEB-INF/swagger/" cache-period="31556926"/>
  • /swagger/** 拦截路径
  • /WEB-INF/swagger/ 映射路径,该路径在第五步创建

5.下载Swagger

  1. 下载swaggerswagger下载地址

  2. 解压下载好的swagger,并将dist目录内容放到/WEB-INF/swagger/路径,如果没有则创建该路径

  3. 修改swagger的index.html页面

     <script>
        window.onload = function() {
          // Begin Swagger UI call region
          const ui = SwaggerUIBundle({
            // url: "https://petstore.swagger.io/v2/swagger.json",
            url: "http://127.0.0.1:8888/项目名称/v2/api-docs.do",//项目名称看自己配置我配置的是/
            dom_id: '#swagger-ui',
            deepLinking: true,
            presets: [
              SwaggerUIBundle.presets.apis,
              SwaggerUIStandalonePreset
            ],
            plugins: [
              SwaggerUIBundle.plugins.DownloadUrl
            ],
            layout: "StandaloneLayout"
          })
          // End Swagger UI call region
    
          window.ui = ui
        }
      </script>
    

6.写具体的controller(此类在网上找的)

@Controller
@RequestMapping("/userController")
@Api(tags = "二:用户信息") //swagger分类标题注解
public class UserController {

    @RequestMapping(value = "/listCompound", method = RequestMethod.GET)
    @ResponseBody
    @ApiResponses(value = {
            @ApiResponse(code = 500, message = "系统错误"),
            @ApiResponse(code = 200, message = "0 成功,其它为错误,返回格式:{code:0,data[{}]},data中的属性参照下方Model", response = String.class)})
    @ApiOperation(httpMethod = "GET", value = "个人信息")//swagger 当前接口注解
    public String listCompound(
            @ApiParam(required = true, name = "start", value = "start") int start,
            int limit,
            @ApiParam(required = false, name = "userName", value = "名称模糊查询") String userName) {

        return "hello";
    }
}

7.访问swagger

http://127.0.0.1:8888/swagger/index.html 
可能是SSL证书问题导致的。你可以尝试在Swagger的配置文件中添加如下配置,忽略SSL证书的验证: ```java @Bean public Docket api() { return new Docket(DocumentationType.SWAGGER_2) .protocols(new HashSet<>(Arrays.asList("https", "http"))) .apiInfo(apiInfo()) .select() .apis(RequestHandlerSelectors.any()) .paths(PathSelectors.any()) .build() .securitySchemes(Arrays.asList(apiKey())) .securityContexts(Arrays.asList(securityContext())); } private ApiKey apiKey() { return new ApiKey("JWT", AUTHORIZATION_HEADER, "header"); } private SecurityContext securityContext() { return SecurityContext.builder() .securityReferences(defaultAuth()) .forPaths(PathSelectors.any()) .build(); } List<SecurityReference> defaultAuth() { AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything"); AuthorizationScope[] authorizationScopes = new AuthorizationScope[1]; authorizationScopes[0] = authorizationScope; return Arrays.asList(new SecurityReference("JWT", authorizationScopes)); } private ApiInfo apiInfo() { return new ApiInfoBuilder() .title("API接口文档") .description("SpringBoot整合Swagger,详细信息......") .termsOfServiceUrl("http://localhost:8080/") .contact("联系人") .version("1.0") .build(); } @Bean public RestTemplate restTemplate() throws Exception { TrustStrategy acceptingTrustStrategy = (X509Certificate[] chain, String authType) -> true; SSLContext sslContext = SSLContexts.custom().loadTrustMaterial(null, acceptingTrustStrategy).build(); SSLConnectionSocketFactory csf = new SSLConnectionSocketFactory(sslContext); CloseableHttpClient httpClient = HttpClients.custom().setSSLSocketFactory(csf).build(); HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(); requestFactory.setHttpClient(httpClient); RestTemplate restTemplate = new RestTemplate(requestFactory); return restTemplate; } ``` 其中,`restTemplate()` 方法中的代码是忽略SSL证书的验证。如果你不需要使用RestTemplate,可以不需要这个方法。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值