好久没上了, 看到又有人回复了. 我就来修改一下. 修改时间  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

2018 最新 spring boot 整合 swagger2 (swagger2 版本 2.8.0)的更多相关文章

  1. spring boot 整合mybatis + swagger2

    之前使用springMVC+spring+mybatis,总是被一些繁琐的xml配置,有时候如果配置出错,还要检查各种xml配置,偶然接触到了spring boot 后发现搭建一个web项目真的是1分 ...

  2. Spring Boot整合JPA、Redis和Swagger2

    好久没有总结了,最近也一直在学习.今天就把spring boot与其它技术的整合做个小总结,主要是jpa.redis和swagger2.公司里有用到这些,整合起来也很简单. 首先,新建一个Spring ...

  3. spring boot整合Swagger2

    Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化RESTful风格的 Web 服务.总体目标是使客户端和文件系统作为服务器以同样的速度来更新.文件的方法,参数和模型紧密集成到服务器 ...

  4. Spring Boot 项目学习 (四) Spring Boot整合Swagger2自动生成API文档

    0 引言 在做服务端开发的时候,难免会涉及到API 接口文档的编写,可以经历过手写API 文档的过程,就会发现,一个自动生成API文档可以提高多少的效率. 以下列举几个手写API 文档的痛点: 文档需 ...

  5. spring boot 整合 swagger2

    swagger2为了更好的管理api文档接口 swagger构建的api文档如下,清晰,避免了手写api诸多痛点 一,添加依赖 <!--swagger2的官方依赖--> <depen ...

  6. Spring Boot中使用Swagger2构建强大的RESTful API文档

    由于Spring Boot能够快速开发.便捷部署等特性,相信有很大一部分Spring Boot的用户会用来构建RESTful API.而我们构建RESTful API的目的通常都是由于多终端的原因,这 ...

  7. Spring Boot中使用Swagger2自动构建API文档

    由于Spring Boot能够快速开发.便捷部署等特性,相信有很大一部分Spring Boot的用户会用来构建RESTful API.而我们构建RESTful API的目的通常都是由于多终端的原因,这 ...

  8. Spring Boot中使用Swagger2构建RESTful API文档

    在开发rest api的时候,为了减少与其他团队平时开发期间的频繁沟通成本,传统做法我们会创建一份RESTful API文档来记录所有接口细节,然而这样的做法有以下几个问题: 1.由于接口众多,并且细 ...

  9. Spring Boot 中使用 Swagger2 构建强大的 RESTful API 文档

    项目现状:由于前后端分离,没有很好的前后端合作工具. 由于接口众多,并且细节复杂(需要考虑不同的HTTP请求类型.HTTP头部信息.HTTP请求内容等),高质量地创建这份文档本身就是件非常吃力的事,下 ...

随机推荐

  1. keepalive+Haproxy

    1.keepalive Keepalived 是一款轻量级HA集群应用,它的设计初衷是为了做LVS集群的HA,即探测LVS健康情况,从而进行主备切换,不仅如此,还能够探测LVS代理的后端主机的健康状况 ...

  2. document.readyState和document.DOMContentLoaded判断DOM的加载完成

    document.readyState:判断文档是否加载完成.firefox不支持. 这个属性是只读的,传回值有以下的可能: 0-UNINITIALIZED:XML 对象被产生,但没有任何文件被加载. ...

  3. 23-python基础-python3-浅拷贝与深拷贝(1)

    1.可变和不可变数据类型. 列表是‘可变的’数据类型,它的值可以添加.删除或改变. 字符串是‘不可变的’,它不能被更改. (1)字符串 尝试对字符串中的一个字符重新赋值,将导致TypeError错误. ...

  4. 【足迹C++primer】47、Moving Objects(2)

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/cutter_point/article/details/37954805 Moving Object ...

  5. CG-CTF pwn部分wp

    面向pwn刷cgctfPWN1,When did you born题目给了一个ELF文件,和一个.C文件先运行ELF,大概如下What’s Your Birth?0What’s Your Name?0 ...

  6. RLO文件名欺骗

    windows下面,支持一种特殊的unicode字符RLO,一个字符串中如果有这个字符的话,那么在windows下显示时,就会把RLO右侧的字符串逆序显示出来,原始字符串:abcd[RLO]efgh, ...

  7. linux6.5 网卡绑定

    Linux网口绑定 通过网口绑定(bond)技术,可以很容易实现网口冗余,负载均衡,从而达到高可用高可靠的目的.前提约定: 2个物理网口分别是:eth0,eth1 绑定后的虚拟口是:bond0 服务器 ...

  8. JavaScript 绑定事件时传递数据

    var data = { name: 'Ruchee', email: 'my@ruchee.com' }; data.handleEvent = function (e) { console.log ...

  9. 【Luogu】【关卡2-5】字符串处理(2017年10月)

    任务说明:这里的字符串处理还会变得更加的有意思,难度也更大.需要好好地思考一下.

  10. 7、执行 suite 后,result.html 测试报告中,测试结果全部显示为通过原因分析

    测试用例中,断言 异常后,必须 raise 抛出异常, 若无raise ,则测试报告中测试结果全部显示为通过. 抛出后,显示实际测试结果,通过/未通过 __author__ = 'Administra ...