Spring:Spring HATEOAS 0.19.0 的 Spring 引导版本?
Spring: which Spring Boot version for Spring HATEOAS 0.19.0?
我想使用Spring HATEOAS
的最新稳定版0.19.0.RELEASE
。我将它与 Spring Boot
的最新稳定版本 1.2.6.RELEASE
相结合。在 build.gradle
中我们发现
apply plugin: 'spring-boot'
...
dependencies {
compile("org.springframework.boot:spring-boot-starter-web:1.2.6.RELEASE")
compile 'org.springframework.hateoas:spring-hateoas:0.19.0.RELEASE'
}
当我启动主应用程序时,出现异常
Exception in thread "main" org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'org.springframework.boot.autoconfigure.hateoas.
HypermediaAutoConfiguration$HypermediaConfiguration$HalObjectMapperConfiguration':
Invocation of init method failed; nested exception is java.lang.NoSuchMethodError:
org.springframework.hateoas.hal.Jackson2HalModule$HalHandlerInstantiator.<init>
(Lorg/springframework/hateoas/RelProvider;Lorg/springframework/hateoas/hal/CurieProvider;)V
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:136)
...
at ... Application.main(Application.java:...)
这看起来很糟糕,但我们可以翻译它。一方面,在 spring-boot-autoconfigure-1.2.6.RELEASE.jar
的 org.springframework.boot.autoconfigure.hateoas.HypermediaAutoConfiguration
中,我们发现
public class HypermediaAutoConfiguration {
...
protected static class HypermediaConfiguration {
...
protected static class HalObjectMapperConfiguration {
...
private void registerHalModule(ObjectMapper objectMapper) {
...
Jackson2HalModule.HalHandlerInstantiator instantiator = new Jackson2HalModule.HalHandlerInstantiator(
HalObjectMapperConfiguration.this.relProvider,
HalObjectMapperConfiguration.this.curieProvider);
...
这意味着Jackson2HalModule.HalHandlerInstantiator
的两个参数构造函数被调用。另一方面,不幸的是,在 spring-hateoas-0.19.0.RELEASE.jar
的 Jackson2HalModule.HalHandlerInstantiator
中,构造函数只有 3 或 4 个参数:
public class Jackson2HalModule extends SimpleModule {
...
public static class HalHandlerInstantiator extends HandlerInstantiator {
...
public HalHandlerInstantiator(RelProvider resolver, CurieProvider curieProvider,
MessageSourceAccessor messageSource) {
...
}
public HalHandlerInstantiator(RelProvider resolver, CurieProvider curieProvider,
MessageSourceAccessor messageSource, boolean enforceEmbeddedCollections) {
...
}
//no further constructors
我试过较新的、不稳定的 Spring Boot
版本,但这也不起作用。我不想使用较低版本的 Spring HATEOAS
,因为在这种情况下会出现其他错误。
你知道有没有解决办法?
我正在使用 1.2.5.RELEASE
和 0.19.0.RELEASE
,没有任何错误。像这样升级了一些依赖项:
<properties>
<spring-data-releasetrain.version>Gosling-RELEASE</spring-data-releasetrain.version>
<spring-hateoas.version>0.19.0.RELEASE</spring-hateoas.version>
<jackson.version>2.6.1</jackson.version>
</properties>
您似乎有多个版本的 spring-hateoas
jar,这是我的依赖配置。
compile ("org.springframework.boot:spring-boot-starter-hateoas:1.2.6.RELEASE"){
exclude module: 'spring-hateoas'
}
compile 'org.springframework.hateoas:spring-hateoas:0.19.0.RELEASE'
并且根据 Maven 中央 spring-boot-starter-hateoas:1.2.6.RELEASE
编译依赖项,应该与更新的 spring-hateoas 0.19.0
一起工作
我想使用Spring HATEOAS
的最新稳定版0.19.0.RELEASE
。我将它与 Spring Boot
的最新稳定版本 1.2.6.RELEASE
相结合。在 build.gradle
中我们发现
apply plugin: 'spring-boot'
...
dependencies {
compile("org.springframework.boot:spring-boot-starter-web:1.2.6.RELEASE")
compile 'org.springframework.hateoas:spring-hateoas:0.19.0.RELEASE'
}
当我启动主应用程序时,出现异常
Exception in thread "main" org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'org.springframework.boot.autoconfigure.hateoas.
HypermediaAutoConfiguration$HypermediaConfiguration$HalObjectMapperConfiguration':
Invocation of init method failed; nested exception is java.lang.NoSuchMethodError:
org.springframework.hateoas.hal.Jackson2HalModule$HalHandlerInstantiator.<init>
(Lorg/springframework/hateoas/RelProvider;Lorg/springframework/hateoas/hal/CurieProvider;)V
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:136)
...
at ... Application.main(Application.java:...)
这看起来很糟糕,但我们可以翻译它。一方面,在 spring-boot-autoconfigure-1.2.6.RELEASE.jar
的 org.springframework.boot.autoconfigure.hateoas.HypermediaAutoConfiguration
中,我们发现
public class HypermediaAutoConfiguration {
...
protected static class HypermediaConfiguration {
...
protected static class HalObjectMapperConfiguration {
...
private void registerHalModule(ObjectMapper objectMapper) {
...
Jackson2HalModule.HalHandlerInstantiator instantiator = new Jackson2HalModule.HalHandlerInstantiator(
HalObjectMapperConfiguration.this.relProvider,
HalObjectMapperConfiguration.this.curieProvider);
...
这意味着Jackson2HalModule.HalHandlerInstantiator
的两个参数构造函数被调用。另一方面,不幸的是,在 spring-hateoas-0.19.0.RELEASE.jar
的 Jackson2HalModule.HalHandlerInstantiator
中,构造函数只有 3 或 4 个参数:
public class Jackson2HalModule extends SimpleModule {
...
public static class HalHandlerInstantiator extends HandlerInstantiator {
...
public HalHandlerInstantiator(RelProvider resolver, CurieProvider curieProvider,
MessageSourceAccessor messageSource) {
...
}
public HalHandlerInstantiator(RelProvider resolver, CurieProvider curieProvider,
MessageSourceAccessor messageSource, boolean enforceEmbeddedCollections) {
...
}
//no further constructors
我试过较新的、不稳定的 Spring Boot
版本,但这也不起作用。我不想使用较低版本的 Spring HATEOAS
,因为在这种情况下会出现其他错误。
你知道有没有解决办法?
我正在使用 1.2.5.RELEASE
和 0.19.0.RELEASE
,没有任何错误。像这样升级了一些依赖项:
<properties>
<spring-data-releasetrain.version>Gosling-RELEASE</spring-data-releasetrain.version>
<spring-hateoas.version>0.19.0.RELEASE</spring-hateoas.version>
<jackson.version>2.6.1</jackson.version>
</properties>
您似乎有多个版本的 spring-hateoas
jar,这是我的依赖配置。
compile ("org.springframework.boot:spring-boot-starter-hateoas:1.2.6.RELEASE"){
exclude module: 'spring-hateoas'
}
compile 'org.springframework.hateoas:spring-hateoas:0.19.0.RELEASE'
并且根据 Maven 中央 spring-boot-starter-hateoas:1.2.6.RELEASE
编译依赖项,应该与更新的 spring-hateoas 0.19.0