歡迎您光臨本站 註冊首頁

SpringBoot集成SwaggerUi以及啟動時遇到的錯誤

←手機掃碼閱讀     niceskyabc @ 2020-06-12 , reply:0

SwaggerUi是一個自動生成接口文檔,並且還可以去測試這些接口的東西。

SpringBoot集成SwaggerUi

引入依賴

  2.6.1org.springframework.bootspring-boot-starter-webio.springfoxspringfox-swagger2${swagger.version}io.springfoxspringfox-swagger-ui${swagger.version}

 

編寫Swagger配置類com.wjh.config.SwaggerConfig

  package com.wjh.config;    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.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;    @Configuration  //表示是Swagger的配置類  @EnableSwagger2  //啟用Swagger2  public class SwaggerConfig {    @Bean    public Docket api(){      return new Docket(DocumentationType.SWAGGER_2)          .apiInfo(apiInfo())          .pathMapping("/")          .select()          .paths(PathSelectors.regex("/.*"))          .build();    }      private ApiInfo apiInfo() {      return new ApiInfoBuilder().title("我的接口文檔")          .contact(new Contact("wjh", "", "wjh_dan@163.com"))          .description("這是swaggerUI生成的接口文檔")          .version("1.0.0.0")          .build();    }  }

 

編寫接口方法類com.wjh.server.MyMethod

  package com.wjh.server;    import io.swagger.annotations.Api;  import io.swagger.annotations.ApiOperation;  import org.springframework.web.bind.annotation.*;  import javax.servlet.http.Cookie;  import javax.servlet.http.HttpServletRequest;  import javax.servlet.http.HttpServletResponse;  import java.util.HashMap;  import java.util.Map;  import java.util.Objects;    @RestController  @Api(value = "/", description = "全部的get方法") //Swagger的註解  public class MyMethod {      @RequestMapping(value = "/getCookies", method = RequestMethod.GET)    @ApiOperation(value = "通過這個方法可以獲取到cookies", httpMethod = "GET")  //Swagger的註解    public String getCookies(HttpServletResponse response){      //HttpServletRequest 裝請求信息的類      //HttpServletResponse 裝相應信息的類      Cookie cookie = new Cookie("login", "true");      response.addCookie(cookie);      return "恭喜你,獲得cookies成功!";    }      /**     * 要求客戶端攜帶cookies訪問     * 這是一個需要攜帶cookies信息才能訪問的get請求     */    @RequestMapping(value = "/get/with/cookies", method = RequestMethod.GET)    @ApiOperation(value = "要求客戶端攜帶cookies訪問", httpMethod = "GET")  //Swagger的註解    public String getWithCookies(HttpServletRequest request){      Cookie[] cookies = request.getCookies();      if (Objects.isNull(cookies)){        return "你必須攜帶cookies才能訪問";      }        for (Cookie cookie : cookies) {        if (cookie.getName().equals("login") && cookie.getValue().equals("true")){          return "這是一個需要攜帶cookies信息才能訪問的get請求";        }      }        return "你必須攜帶cookies才能訪問";    }      /**     * 開發一個需要攜帶參數才能訪問的get請求。     * 第一種實現方式, url:key=value&key=value     * 模擬獲取商品列表     */    @RequestMapping(value = "/get/with/param", method = RequestMethod.GET)    @ApiOperation(value = "開發一個需要攜帶參數才能訪問的get請求。第一種實現方式", httpMethod = "GET")  //Swagger的註解    public MapgetList(@RequestParam Integer start, @RequestParam Integer end){      MapmyList = new HashMap<>();        myList.put("鞋", 400);      myList.put("襯衫", 300);      myList.put("乾脆面", 1);      myList.put("雪碧", 3);        return myList;    }      /**     * 開發一個需要攜帶參數才能訪問的get請求。     * 第二種實現方式, url: ip:port/get/with/param/10/20     * 模擬獲取商品列表     */    @RequestMapping(value = "/get/with/param/{start}/{end}")    @ApiOperation(value = "開發一個需要攜帶參數才能訪問的get請求。第二種實現方式", httpMethod = "GET")  //Swagger的註解    public MapmyGetList(@PathVariable Integer start, @PathVariable Integer end) {      MapmyList = new HashMap<>();        myList.put("雪碧", 3);      myList.put("鞋", 400);      myList.put("襯衫", 300);      myList.put("可樂", 3);        return myList;    }  }

 

編寫啟動類Application

  import org.springframework.boot.SpringApplication;  import org.springframework.boot.autoconfigure.SpringBootApplication;  import org.springframework.context.annotation.ComponentScan;    @SpringBootApplication  @ComponentScan("com.wjh")  public class Application {    public static void main(String[] args) {      SpringApplication.run(Application.class, args);    }  }

 

記一次啟動時遇到的錯誤。(上面類中都是正確的)

  2020-06-08 21:39:10.147 ERROR 5720 --- [      main] s.d.s.r.o.OperationHttpMethodReader   : Invalid http method: GetValid ones are [[Lorg.springframework.web.bind.annotation.RequestMethod;@5477a1ca]    java.lang.IllegalArgumentException: No enum constant org.springframework.web.bind.annotation.RequestMethod.Get  	at java.lang.Enum.valueOf(Enum.java:238) ~[na:1.8.0_25]  	at org.springframework.web.bind.annotation.RequestMethod.valueOf(RequestMethod.java:35) ~[spring-web-5.2.2.RELEASE.jar:5.2.2.RELEASE]  	at springfox.documentation.swagger.readers.operation.OperationHttpMethodReader.apply(OperationHttpMethodReader.java:49) ~[springfox-swagger-common-2.6.1.jar:2.6.1]  	at springfox.documentation.spring.web.plugins.DocumentationPluginsManager.operation(DocumentationPluginsManager.java:123) [springfox-spring-web-2.6.1.jar:2.6.1]  	at springfox.documentation.spring.web.readers.operation.ApiOperationReader.read(ApiOperationReader.java:73) [springfox-spring-web-2.6.1.jar:2.6.1]  	at springfox.documentation.spring.web.scanners.CachingOperationReader$1.load(CachingOperationReader.java:50) [springfox-spring-web-2.6.1.jar:2.6.1]  	at springfox.documentation.spring.web.scanners.CachingOperationReader$1.load(CachingOperationReader.java:48) [springfox-spring-web-2.6.1.jar:2.6.1]  	at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3527) [guava-18.0.jar:na]  	at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2319) [guava-18.0.jar:na]  	at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2282) [guava-18.0.jar:na]  	at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2197) [guava-18.0.jar:na]  	at com.google.common.cache.LocalCache.get(LocalCache.java:3937) [guava-18.0.jar:na]  	at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3941) [guava-18.0.jar:na]  	at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4824) [guava-18.0.jar:na]  	at com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:4830) [guava-18.0.jar:na]  	at springfox.documentation.spring.web.scanners.CachingOperationReader.read(CachingOperationReader.java:57) [springfox-spring-web-2.6.1.jar:2.6.1]  	at springfox.documentation.spring.web.scanners.ApiDescriptionReader.read(ApiDescriptionReader.java:66) [springfox-spring-web-2.6.1.jar:2.6.1]  	at springfox.documentation.spring.web.scanners.ApiListingScanner.scan(ApiListingScanner.java:89) [springfox-spring-web-2.6.1.jar:2.6.1]  	at springfox.documentation.spring.web.scanners.ApiDocumentationScanner.scan(ApiDocumentationScanner.java:70) [springfox-spring-web-2.6.1.jar:2.6.1]  	at springfox.documentation.spring.web.plugins.DocumentationPluginsBootstrapper.scanDocumentation(DocumentationPluginsBootstrapper.java:85) [springfox-spring-web-2.6.1.jar:2.6.1]  	at springfox.documentation.spring.web.plugins.DocumentationPluginsBootstrapper.start(DocumentationPluginsBootstrapper.java:127) [springfox-spring-web-2.6.1.jar:2.6.1]  	at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:182) [spring-context-5.2.2.RELEASE.jar:5.2.2.RELEASE]  	at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:53) [spring-context-5.2.2.RELEASE.jar:5.2.2.RELEASE]  	at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:360) [spring-context-5.2.2.RELEASE.jar:5.2.2.RELEASE]  	at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:158) [spring-context-5.2.2.RELEASE.jar:5.2.2.RELEASE]  	at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:122) [spring-context-5.2.2.RELEASE.jar:5.2.2.RELEASE]  	at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:894) [spring-context-5.2.2.RELEASE.jar:5.2.2.RELEASE]  	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.finishRefresh(ServletWebServerApplicationContext.java:162) [spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE]  	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:553) [spring-context-5.2.2.RELEASE.jar:5.2.2.RELEASE]  	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141) [spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE]  	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:747) [spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE]  	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) [spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE]  	at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) [spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE]  	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226) [spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE]  	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215) [spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE]  	at Application.main(Application.java:10) [classes/:na]

 

原因是在MyGetMethod類中:

  @ApiOperation(value = "通過這個方法可以獲取到cookies", httpMethod = "Get")

 

這個註解中httpMethod = "Get"出錯。
 將其改為:httpMethod = “GET”

  @ApiOperation(value = "通過這個方法可以獲取到cookies", httpMethod = "GET")

 

即可。

打開瀏覽器,輸入http://localhost/swagger-ui.html


   


[niceskyabc ] SpringBoot集成SwaggerUi以及啟動時遇到的錯誤已經有256次圍觀

http://coctec.com/docs/java/show-post-238280.html