Spring: какая версия Spring Boot для Spring HATEOAS 0.19.0?
Я хочу использовать последнюю стабильную версию 0.19.0.RELEASE
из Spring HATEOAS
, Я совмещаю это с последней стабильной версией 1.2.6.RELEASE
из Spring Boot
, в 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:...)
Это выглядит ужасно, но мы можем перевести это. С одной стороны, в org.springframework.boot.autoconfigure.hateoas.HypermediaAutoConfiguration
из spring-boot-autoconfigure-1.2.6.RELEASE.jar
мы нашли
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
называется. С другой стороны, в Jackson2HalModule.HalHandlerInstantiator
из spring-hateoas-0.19.0.RELEASE.jar
конструкторы, к сожалению, имеют только 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
, потому что в этом случае возникают другие ошибки.
Знаете ли вы, есть ли обходной путь?
2 ответа
Я использую 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
jars, вот конфигурация зависимости у меня есть.
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 Central spring-boot-starter-hateoas:1.2.6.RELEASE
зависимость компиляции, должна работать с обновленной spring-hateoas 0.19.0