使用Java9的Swagger UI(spring boot 2.0)

Gui*_*reg 1 spring swagger-ui spring-boot swagger-2.0 java-9

我正试图让swagger 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')
Run Code Online (Sandbox Code Playgroud)

招摇是按照它应该配置的

@Configuration
@EnableSwagger2
public class SwaggerConfig {
    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.any())
                .paths(PathSelectors.any())
                .build();
    }
}
Run Code Online (Sandbox Code Playgroud)

编译得很好,但是当我使用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
Run Code Online (Sandbox Code Playgroud)

可能是什么问题呢?与Java9不兼容?然后我能以某种方式使它工作吗?

eis*_*eis 5

是的,这与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

  • 根据JDK 9文档,`--add-modules java.xml.bind`是一种临时解决方法,因为java SE中不推荐使用java.xml.bind进行删除.它已经在JDK 11 EA版本中被删除,有关所有细节,请参阅JEP 320.最好的选择是转移到JAXB的独立版本,可以从Maven Central下载API和实现. (2认同)