2018 最新 spring boot 整合 swagger2 (swagger2 版本 2.8.0)

很久沒上了, 看到又有人回覆了. 我就來修改一下. 修改時間  2018年5月16日php

這回給你上全新版本. 至發稿時間,全部的包都是新版. html

注意: 高版本須要添加  jaxb-api 包, 不然會報錯. 最下面列出報錯信息java

2018年5月17日更新  jdk8 不須要添加  jaxb-apiweb

版本:spring

    jdk 10apache

    spring boot 2.0.2swift

    swagger 2.8.0api

  1.  pom.xml 包引入
 
  
  
  
  
  
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation= "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0 </modelVersion>
  5. <groupId>com.example </groupId>
  6. <artifactId>swagger </artifactId>
  7. <version>0.0.1-SNAPSHOT </version>
  8. <packaging>jar </packaging>
  9. <name>swagger </name>
  10. <description>Demo project for Spring Boot </description>
  11. <!-- 華爲Maven鏡像 固然你也能夠用阿里的-->
  12. <repositories>
  13. <repository>
  14. <id>huaweicloud </id>
  15. <url>https://repo.huaweicloud.com/repository/maven/ </url>
  16. <!--<url>http://maven.aliyun.com/nexus/content/groups/public/</url>-->
  17. <releases>
  18. <enabled>true </enabled>
  19. </releases>
  20. <snapshots>
  21. <enabled>true </enabled>
  22. <updatePolicy>always </updatePolicy>
  23. <checksumPolicy>fail </checksumPolicy>
  24. </snapshots>
  25. </repository>
  26. </repositories>
  27. <parent>
  28. <groupId>org.springframework.boot </groupId>
  29. <artifactId>spring-boot-starter-parent </artifactId>
  30. <version>2.0.2.RELEASE </version>
  31. <relativePath/> <!-- lookup parent from repository -->
  32. </parent>
  33. <properties>
  34. <project.build.sourceEncoding>UTF-8 </project.build.sourceEncoding>
  35. <project.reporting.outputEncoding>UTF-8 </project.reporting.outputEncoding>
  36. <java.version>10 </java.version>
  37. </properties>
  38. <dependencies>
  39. <dependency>
  40. <groupId>org.springframework.boot </groupId>
  41. <artifactId>spring-boot-starter-web </artifactId>
  42. </dependency>
  43. <dependency>
  44. <groupId>org.springframework.boot </groupId>
  45. <artifactId>spring-boot-starter-test </artifactId>
  46. <scope>test </scope>
  47. </dependency>
  48. <dependency>
  49. <groupId>io.springfox </groupId>
  50. <artifactId>springfox-swagger2 </artifactId>
  51. <version>2.8.0 </version>
  52. </dependency>
  53. <dependency>
  54. <groupId>io.springfox </groupId>
  55. <artifactId>springfox-swagger-ui </artifactId>
  56. <version>2.8.0 </version>
  57. </dependency>
  58. <dependency>
  59. <groupId>javax.xml.bind </groupId>
  60. <artifactId>jaxb-api </artifactId>
  61. <version>2.3.0 </version>
  62. </dependency>
  63. </dependencies>
  64. <build>
  65. <plugins>
  66. <plugin>
  67. <groupId>org.springframework.boot </groupId>
  68. <artifactId>spring-boot-maven-plugin </artifactId>
  69. </plugin>
  70. </plugins>
  71. </build>
  72. </project>

 

先檢查Maven中包是否導入, 如下以idea爲列. 看是否有 swagger-ui 這個包app

 

 

如下爲代碼配置:maven

 

  
  
  
  
  
  1. package net.ainio.config;
  2. import org.springframework.context.annotation.Bean;
  3. import org.springframework.context.annotation.Configuration;
  4. import springfox.documentation.builders.ApiInfoBuilder;
  5. import springfox.documentation.builders.PathSelectors;
  6. import springfox.documentation.builders.RequestHandlerSelectors;
  7. import springfox.documentation.service.ApiInfo;
  8. import springfox.documentation.spi.DocumentationType;
  9. import springfox.documentation.spring.web.plugins.Docket;
  10. import springfox.documentation.swagger2.annotations.EnableSwagger2;
  11. @ Configuration
  12. @ EnableSwagger2
  13. public class SwaggerConfig {
  14. @ Bean
  15. public Docket api() {
  16. return new Docket( DocumentationType. SWAGGER_2)
  17. .apiInfo(apiInfo())
  18. .select()
  19. // 自行修改成本身的包路徑
  20. .apis( RequestHandlerSelectors.basePackage( "net.ainio.controller"))
  21. .paths( PathSelectors.any())
  22. .build();
  23. }
  24. private ApiInfo apiInfo() {
  25. return new ApiInfoBuilder()
  26. .title( "api文檔")
  27. .description( "restfun 風格接口")
  28. //服務條款網址
  29. //.termsOfServiceUrl("http://blog.csdn.net/forezp")
  30. .version( "1.0")
  31. //.contact(new Contact("帥呆了", "url", "email"))
  32. .build();
  33. }
  34. }

 

測試controller

注意下這兩個的區別哦, 否則前臺會返回 404 錯誤

  
  
  
  @RestController
  
  
  
  @Controller
  
  
  
  
  
  1. package net.ainio.controller;
  2. import io.swagger.annotations.Api;
  3. import io.swagger.annotations.ApiImplicitParam;
  4. import io.swagger.annotations.ApiOperation;
  5. import org.apache.catalina.User;
  6. import org.springframework.web.bind. annotation.*;
  7. @Api(value="/test", tags="測試接口模塊")
  8. @RestController
  9. @RequestMapping("/test")
  10. public class TestSwaggerController {
  11. @ApiOperation(value="展現首頁信息", notes = "展現首頁信息")
  12. @GetMapping("/show")
  13. public Object showInfo(){
  14. return "hello world";
  15. }
  16. @ApiOperation(value="添加用戶信息", notes = "添加用戶信息")
  17. @ApiImplicitParam(name="user", value="User", required = true, dataType = "User")
  18. @PostMapping("/addUser")
  19. public Object addUser( @RequestBody User user){
  20. return "success";
  21. }
  22. }

 

啓動後訪問

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

 

 

感謝 Michael_Zhan_Tcys 網友

 

下面列出, 不添加 jabx-api的報錯信息

 



Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2018-05-16 23:16:20.452 ERROR 10220 --- [  restartedMain] o.s.boot.SpringApplication               : Application run failed


org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'xmlModelPlugin': Lookup method resolution failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [springfox.documentation.schema.XmlModelPlugin] from ClassLoader [jdk.internal.loader.ClassLoaders$AppClassLoader@4629104a]
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:262) ~[spring-beans-5.0.6.RELEASE.jar:5.0.6.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineConstructorsFromBeanPostProcessors(AbstractAutowireCapableBeanFactory.java:1202) ~[spring-beans-5.0.6.RELEASE.jar:5.0.6.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1127) ~[spring-beans-5.0.6.RELEASE.jar:5.0.6.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:541) ~[spring-beans-5.0.6.RELEASE.jar:5.0.6.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:501) ~[spring-beans-5.0.6.RELEASE.jar:5.0.6.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:317) ~[spring-beans-5.0.6.RELEASE.jar:5.0.6.RELEASE]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228) ~[spring-beans-5.0.6.RELEASE.jar:5.0.6.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:315) ~[spring-beans-5.0.6.RELEASE.jar:5.0.6.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-5.0.6.RELEASE.jar:5.0.6.RELEASE]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:760) ~[spring-beans-5.0.6.RELEASE.jar:5.0.6.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:869) ~[spring-context-5.0.6.RELEASE.jar:5.0.6.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550) ~[spring-context-5.0.6.RELEASE.jar:5.0.6.RELEASE]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:140) ~[spring-boot-2.0.2.RELEASE.jar:2.0.2.RELEASE]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759) [spring-boot-2.0.2.RELEASE.jar:2.0.2.RELEASE]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:395) [spring-boot-2.0.2.RELEASE.jar:2.0.2.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:327) [spring-boot-2.0.2.RELEASE.jar:2.0.2.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1255) [spring-boot-2.0.2.RELEASE.jar:2.0.2.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1243) [spring-boot-2.0.2.RELEASE.jar:2.0.2.RELEASE]
at com.example.SwaggerApplication.main(SwaggerApplication.java:10) [classes/:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:564) ~[na:na]
at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) [spring-boot-devtools-2.0.2.RELEASE.jar:2.0.2.RELEASE]
Caused by: java.lang.IllegalStateException: Failed to introspect Class [springfox.documentation.schema.XmlModelPlugin] from ClassLoader [jdk.internal.loader.ClassLoaders$AppClassLoader@4629104a]
at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:659) ~[spring-core-5.0.6.RELEASE.jar:5.0.6.RELEASE]
at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:556) ~[spring-core-5.0.6.RELEASE.jar:5.0.6.RELEASE]
at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:541) ~[spring-core-5.0.6.RELEASE.jar:5.0.6.RELEASE]
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:245) ~[spring-beans-5.0.6.RELEASE.jar:5.0.6.RELEASE]
... 23 common frames omitted
Caused by: java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlType
at java.base/java.lang.Class.getDeclaredMethods0(Native Method) ~[na:na]
at java.base/java.lang.Class.privateGetDeclaredMethods(Class.java:3119) ~[na:na]
at java.base/java.lang.Class.getDeclaredMethods(Class.java:2268) ~[na:na]
at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:641) ~[spring-core-5.0.6.RELEASE.jar:5.0.6.RELEASE]
... 26 common frames omitted
Caused by: java.lang.ClassNotFoundException: javax.xml.bind.annotation.XmlType
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582) ~[na:na]
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:190) ~[na:na]
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:499) ~[na:na]
... 30 common frames omitted




Process finished with exit code 0

 

本文連接:https://blog.csdn.net/aPiFen/article/details/79397100

相關文章
相關標籤/搜索