java - 没有可用的 'org.springframework.data.rest.core.util.Java8PluginRegistry' 类型的合格 bean

标签 java spring spring-boot spring-data-rest spring-hateoas

作为将 spring 应用程序迁移到 springboot (2.1.7) 的一部分,我遇到了自定义 RepositoryEntityLinks 类的问题。下面的类给出了构造函数参数 PluginRegistry 的编译问题,因此我将其更改为 Java8PluginRegistry :

之前:

public class CustomRepositoryEntityLinks extends RepositoryEntityLinks {

  private final ResourceMappings mappings;
  private final RepositoryRestConfiguration config;

  public CustomRepositoryEntityLinks(
          Repositories repositories,
          ResourceMappings mappings,
          RepositoryRestConfiguration config,
          PagingAndSortingTemplateVariables templateVariables,
          PluginRegistry<BackendIdConverter, Class<?>> idConverters) {

    super(repositories, mappings, config, templateVariables, idConverters);

    this.mappings = mappings;
    this.config = config;

  }

  @Override
  public LinkBuilder linkFor(Class<?> type) {
    ResourceMetadata metadata = mappings.getMetadataFor(type);
    return new CustomRepositoryLinkBuilder(metadata, config.getBaseUri());
  }
}

之后:

public class CustomRepositoryEntityLinks extends RepositoryEntityLinks {

  private final ResourceMappings mappings;
  private final RepositoryRestConfiguration config;

  public CustomRepositoryEntityLinks(
          Repositories repositories,
          ResourceMappings mappings,
          RepositoryRestConfiguration config,
          PagingAndSortingTemplateVariables templateVariables,
          Java8PluginRegistry<BackendIdConverter, Class<?>> idConverters) {

    super(repositories, mappings, config, templateVariables, idConverters);

    this.mappings = mappings;
    this.config = config;

  }

  @Override
  public LinkBuilder linkFor(Class<?> type) {
    ResourceMetadata metadata = mappings.getMetadataFor(type);
    return new CustomRepositoryLinkBuilder(metadata, config.getBaseUri());
  }
}

我唯一改变的是构造函数参数,从 PluginRegistry 更改为 Java8PluginRegistry。

当我向此类添加 @Component 注释时,应用程序无法启动并出现此问题:

2019-12-20 18:16:33,491|11782|main|WARN|org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext|Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'customRepositoryEntityLinks' defined in file [C:\com\custom\web\common\CustomRepositoryEntityLinks.class]: Unsatisfied dependency expressed through constructor parameter 4; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.data.rest.core.util.Java8PluginRegistry<org.springframework.data.rest.webmvc.spi.BackendIdConverter, java.lang.Class<?>>' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}

***************************
APPLICATION FAILED TO START
***************************

Description:

Parameter 4 of constructor in com.web.common.CustomRepositoryEntityLinks required a bean of type 'org.springframework.data.rest.core.util.Java8PluginRegistry' that could not be found.


Action:

Consider defining a bean of type 'org.springframework.data.rest.core.util.Java8PluginRegistry' in your configuration.

有人可以帮忙吗?预先感谢:)

最佳答案

RepositoryRestMvcConfiguration 不公开 Java8PluginRegistry 类型的 bean。这种行为可能会随着最近的更新而改变。如果您遵循在 RepositoryRestMvcConfiguration 类中创建常规 RepositoryEntityLinks bean 的约定,则可以创建自定义 CustomRepositoryEntityLinks 类的 bean,如下所示如以下代码片段所示(创建 CustomRepositoryEntityLinks 实例的其他参数省略)。

    @Bean
    public CustomRepositoryEntityLinks entityLinks(PluginRegistry<BackendIdConverter, Class<?>> backendIdConverterRegistry, ...) {
        return new CustomRepositoryEntityLinks(..., ..., ..., ..., Java8PluginRegistry.of(backendIdConverterRegistry));
    }

关于java - 没有可用的 'org.springframework.data.rest.core.util.Java8PluginRegistry' 类型的合格 bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59425942/

相关文章:

java - 没有显式强制转换的通用集合编译错误 - 为什么?

java - 使用Java URI验证案例类中的url

Java Spring : How to efficiently read and save large amount of data from a CSV file?

java - 如何初始化一个字符串?

java - 如果采用线性探测,删除是否比单独链接的情况更便宜?

Spring:如何向静态字段注入(inject)值?

spring - 如何使用 Spring 为 HikariCP 设置数据源?

java - 哪个 TaskExecutor 用于异步日志记录?

Spring Cloud Sleuth 不同的跟踪 ID 与 Kafka 集成

java - 如何在 spring-boot 应用程序中正确配置更多身份验证提供程序