zoukankan      html  css  js  c++  java
  • 2018 最新 spring boot 整合 swagger2 (swagger2 版本 2.8.0)

    好久没上了, 看到又有人回复了. 我就来修改一下. 修改时间  2018年5月16日

    这回给你上全新版本. 至发稿时间,所有的包都是新版. 

    注意: 高版本需要添加  jaxb-api 包, 否则会报错. 最下面列出报错信息

    2018年5月17日更新  jdk8 不需要添加  jaxb-api

    版本:

        jdk 10

        spring boot 2.0.2

        swagger 2.8.0

    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 这个包

    以下为代码配置:

    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

  • 相关阅读:
    Linux下忘记MySQL密码的解决办法
    Jenkins——为什么使用持续集成?
    JBoss7部署EJB连接MySQL
    同一进程中的线程有哪些资源可以共享(转)
    基于ssh开发web项目-用户登录流程
    mysql-5.6.16安装流程
    Spring学习笔记
    Hibernate持久化对象状态、转换方法和操作步骤
    Hibernate配置文件与关联映射介绍
    Java的hashCode方法
  • 原文地址:https://www.cnblogs.com/jpfss/p/11445555.html
Copyright © 2011-2022 走看看