2017-01-19 5 views
1

Ich habe gerade angefangen, mit Spring Data Rest herumzuspielen und wollte einen Finder für ein Feld bereitstellen, das in MongoDB indiziert ist. Ich habe die folgende Indexdefinition:Kann MongoDBs Volltextsuche mit Spring Data REST verwendet werden?

@TextIndexed 
private String title; 

und verifiziert, dass der Index erstellt wird. Ich habe eine Finder-Methode auf dem Repository-Definition erstellt:

public interface ContentRespository extends MongoRepository<Content, String> { 
    public Page<Content> findByTitle(@Param("title") TextCriteria title, @Param("pageable") Pageable pageable); 
} 

Durch die REST-API-URL aufrufen:

http://localhost:8080/contents/search/findByTitle?title=test 

ich die folgende Fehlermeldung erhalten:

2017-01-19 13:16:41.831 ERROR 16705 --- [nio-8080-exec-9] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.data.repository.support.QueryMethodParameterConversionException: Failed to convert test into org.springframework.data.mongodb.core.query.TextCriteria!] with root cause 

org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [java.lang.String] to type [@org.springframework.data.repository.query.Param org.springframework.data.mongodb.core.query.TextCriteria] 
at org.springframework.core.convert.support.GenericConversionService.handleConverterNotFound(GenericConversionService.java:324) ~[spring-core-4.3.4.RELEASE.jar:4.3.4.RELEASE] 
.... 

Was wäre die richtige Möglichkeit, die REST-API aufzurufen? Ich kann keine Dokumentation darüber finden. Oder wie wäre es möglich, einen Konverter für TextCriteria zu schreiben?

Antwort

0

Nach einiger Zeit dazu kam ich zurück und fand die Antwort durch einen Sucher mit einer @Query Notation definieren:

@Query("{$text: {$search: ?0}}") 
public Page<Content> findByTitle(@Param("title") String title, @Param("pageable") Pageable pageable); 
0

Nicht im Zusammenhang mit Mongo - aber Spring Rest sagt Ihnen, dass es eingehende Zeichenfolge (von Ihrem Web-Anfrage) nicht zu exposed Methode Parameter konvertieren kann. Sie haben 2 Möglichkeiten - erstellen und Konverter registrieren oder Verfahren in Frage wickeln und Strings erforderlichen Typen konvertieren sich

+0

Ja, gibt es ein Beispiel, wie man einen solchen Konverter schreibt? –

+0

Sicher. Google hilft dabei, es zu finden. Aber das Umhüllen von Inhaltsrepository um eine Klasse wäre einfacher –

+0

sicher, ich kann es googlen, aber meine Frage war mehr über die Standardmethode, um ein _TextIndexed_ Feld über die REST API zuzugreifen. Andere Finder-Methoden für _Indexed_Felder funktionieren nicht. Schreiben eines Konverters wäre die zweite Option –

Verwandte Themen