spring - 使用 Java9 的 Swagger UI (spring boot 2.0)
问题描述
我正在尝试使招摇的 UI 与我的服务一起使用。我正在使用spring boot 2.0和Java 9。为swagger添加了以下依赖项
compile('io.springfox:springfox-swagger2:2.8.0')
compile('io.springfox:springfox-swagger-ui:2.8.0')
swagger 已按应有的方式配置
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.any())
.paths(PathSelectors.any())
.build();
}
}
编译良好,但是当我使用 BootRun 命令启动应用程序时,由于以下原因而失败:
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@4f8e5cde]
Caused by: java.lang.ClassNotFoundException: javax.xml.bind.annotation.XmlType
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:185)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:496)
... 25 common frames omitted
可能是什么问题呢?不兼容Java9?那我可以让它以某种方式工作吗?
解决方案
是的,这与 java 9 不兼容。
我认为你有三个选择:
- 向 xml apis 添加显式依赖项,例如
compile('javax.xml.bind:jaxb-api:2.3.0')
- 将 springfox 版本更新到2.9.0
- 添加
--add-modules java.xml.bind
到 jvm 启动参数(与其他选项相比,这只是一种解决方法而不是修复,因为此模块将在更高版本的 java 中删除)
进一步阅读 Spring Boot 和 java 9:https ://github.com/spring-projects/spring-boot/wiki/Spring-Boot-with-Java-9-and-above
推荐阅读
- arduino - Arduino 运行伺服 N 秒,可能会中断
- java - Spring Boot 应用程序中的 Spring-data-dynamoDB:如果配置了 @EnableDynamoDBAuditing,则 @DynamoDBTable 类不会被识别为持久实体
- java - InteliJ 2018.1 - Java 文件没有运行选项
- android - XMPP 的新用户?
- three.js - Three.js 四元数旋转未正确应用
- c++ - 使用 C++ 获取 Windows 操作系统中的附加设备列表
- json - 在 Python 中从 JSON 文件打印元素
- html - 安排从桌面到智能手机的 DIV 订购
- java - 具有相同自动生成 ID 的两个表
- wcf - 如何将安全标头发送到 WCF 服务