2017-06-29 7 views
2

Ich versuche, feder-data-solr zu verwenden, um darauf zuzugreifen meine Solr-Instanz durch meine Spring-Boot-Anwendung. Ich habe folgende Bean-Klasse:Es wurde kein Konverter gefunden, der vom Typ [java.lang.String] in den Typ [org.springframework.data.solr.core.geo.Point] konvertiert werden könnte.

@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; 
    } 
} 

ich folgende Repository implementiert haben, um die entsprechenden Informationen zuzugreifen:

public interface AssociationsRepository extends SolrCrudRepository<Association, String> { 
} 

ich eine Konfigurationsklasse erstellt haben, die wie die folgende aussieht:

@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; 
    } 

} 

Leider, wenn ich versuche, eine Verbindung von meiner Solr Instanz zu lesen bekam ich folgende Fehlermeldung:

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] 

Ich verstehe nicht, warum es keinen Konverter finden kann, wenn ich es in der Methode solrTemplate() explizit definiert habe.

Das ist meine POM Definition:

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

Vielen Dank für Ihre Hilfe.

EDIT: Ich habe auch mit verschiedenen BUILD-RELEASE versucht, aber sie sind sehr instabil und ich habe eine Menge Fehler bei der Verwendung gefunden.

Antwort

1

Alessandro, wie Sie direkt in der GeoConverters Klasse auf GitHub sehen können, sind die implementierten Wandler nur für:

org.springframework.data.geo.Point 

und nicht für:

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

einfach diese Klasse verwenden, und Sie don brauche dazu keinen eigenen Konverter. Spring Data für Solr führt die Konvertierung für Sie durch. Ich benutze eine leicht gepatchte Version des 3.0.0 M4, aber ich bin mir ziemlich sicher, dass diese Lösung nahtlos auch auf Ihren Fall angewendet werden sollte.

+0

Dank Andrea. Ich hatte keine Zeit für diesen Rückschlag. Ich habe zu viel Solr/Spring Proof of Concept-Codierung zu tun, um mit diesem Problem abgelenkt zu werden. Zu schade, obwohl eine Solr-spezifische Point-Klasse definiert und als der richtige Punkt für Solr-Arbeit impliziert wird. –

Verwandte Themen