没有找到能够从 [java.lang.String] 类型转换为 [org.springframework.data.solr.core.geo.Point] 类型的转换器

Posted

技术标签:

【中文标题】没有找到能够从 [java.lang.String] 类型转换为 [org.springframework.data.solr.core.geo.Point] 类型的转换器【英文标题】:No converter found capable of converting from type [java.lang.String] to type [org.springframework.data.solr.core.geo.Point] 【发布时间】:2017-06-29 15:47:17 【问题描述】:

我正在尝试使用 spring-data-solr 以便通过我的 Spring 引导应用程序访问我的 Solr 实例。我有以下 bean 类:

@SolrDocument(solrCoreName = "associations")
public class Association implements PlusimpleEntityI 
    @Id
    @Indexed
    private String id;
    @Indexed
    private String name;
    @Indexed
    private Point location;
    @Indexed
    private String description;
    @Indexed
    private Set<String> tags;
    @Indexed
    private Set<String> topics;
    @Indexed
    private Set<String> professionals;

    public String getId() 
        return id;
    

    public void setId(String id) 
        this.id = id;
    

    public String getName() 
        return name;
    

    public void setName(String name) 
        this.name = name;
    

    public Point getLocation() 
        return location;
    

    public void setLocation(Point location) 
        this.location = location;
    

    public String getDescription() 
        return description;
    

    public void setDescription(String description) 
        this.description = description;
    

    public Set<String> getTags() 
        return tags;
    

    public void setTags(Set<String> tags) 
        this.tags = tags;
    

    public Set<String> getTopics() 
        return topics;
    

    public void setTopics(Set<String> topics) 
        this.topics = topics;
    

    public Set<String> getProfessionals() 
        return professionals;
    

    public void setProfessionals(Set<String> professionals) 
        this.professionals = professionals;
    

为了访问相关信息,我实现了以下存储库:

public interface AssociationsRepository extends SolrCrudRepository<Association, String> 

我创建了一个配置类,如下所示:

@Configuration
@EnableSolrRepositories(basePackages = "com.package.repositories", multicoreSupport = true)
public class SolrRepositoryConfig 
    @Value("$solr.url")
    private String solrHost;

    @Bean
    public SolrConverter solrConverter() 
        MappingSolrConverter solrConverter = new MappingSolrConverter(new SimpleSolrMappingContext());
        solrConverter.setCustomConversions(new CustomConversions(null));
        return solrConverter;
    

    @Bean
    public SolrClientFactory solrClientFactory () throws Exception 
        return new MulticoreSolrClientFactory(solrClient());
    

    @Bean
    public SolrClient solrClient() throws Exception 
        return new HttpSolrClient.Builder(solrHost).build();
    

    @Bean
    public SolrOperations associationsTemplate() throws Exception 
        SolrTemplate solrTemplate = new SolrTemplate(solrClient());
        solrTemplate.setSolrConverter(solrConverter());
        return solrTemplate;
    


不幸的是,当我尝试从 Solr 实例中读取关联时,出现以下错误:

org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [java.lang.String] to type [org.springframework.data.solr.core.geo.Point]

如果我在solrTemplate() 方法中明确定义了转换器,我不明白为什么它无法找到转换器。

这是我的 POM 定义:

    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-solr</artifactId>
        <version>2.1.4.RELEASE</version>
    </dependency>

感谢您的帮助。

编辑: 我也尝试过使用不同的 BUILD-RELEASE,但它们非常不稳定,我发现使用它们时会出现很多错误。

【问题讨论】:

【参考方案1】:

Alessandro,你可以直接在 GitHub 上的GeoConverters 类中看到,实现的转换器仅适用于:

org.springframework.data.geo.Point

而不是:

org.springframework.data.solr.core.geo.Point

只需使用此类,您甚至不需要自定义转换器。 Solr 的 Spring Data 将为您执行转换。 我使用的是 3.0.0 M4 的略微打补丁的版本,但我很确定这个解决方案也应该无缝地适用于您的情况。

【讨论】:

谢谢安德里亚。我没有时间面对这次挫折。我有太多 Solr/Spring 概念验证代码要做,无法解决这个问题。太糟糕了,尽管特定于 solr 的 Point 类被定义并暗示为用于 Solr 工作的正确 Point。

以上是关于没有找到能够从 [java.lang.String] 类型转换为 [org.springframework.data.solr.core.geo.Point] 类型的转换器的主要内容,如果未能解决你的问题,请参考以下文章

Cannot resolve method 'setAttribute(java.lang.String, java.lang.String)'

HBase alter table 命令失败并显示“错误:d!= java.lang.String”

无法从类型 [java.lang.String] 转换为类型 [java.lang.Long]

无法将 java.lang.String 类型的属性值转换为所需的 java.time.LocalDateTime 类型

如何从 java.lang.String 获取 java.io.InputStream?

Spring @PreAuthorize hasAuthority 异常无法从类型 [java.lang.String] 转换为类型 [java.lang.Boolean] 的值'hasAuthori