2017-01-19 5 views
1

Я только начал играть с Spring Data Rest и хотел разоблачить искатель для поля, которое было проиндексировано в MongoDB. У меня есть следующее определение индекса:Можно ли использовать текстовый поиск MongoDB с Spring Data REST?

@TextIndexed 
private String title; 

и подтверждено, что индекс создан. Я создал метод поиска на хранилище определения:

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

Называя URL REST API:

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

Я получаю следующее сообщение об ошибке:

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] 
.... 

Что бы правильно способ вызова REST API? Я не могу найти документацию об этом. Или как можно было бы написать конвертер для TextCriteria?

ответ

0

Через некоторое время я вернулся к этому и нашел ответ, определив искателя с обозначениями @Query:

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

Не относится к mongo - но весенний отдых говорит вам, что он не может преобразовать входящую строку (из вашего веб-запроса) в параметр выставленного метода. У Вас есть 2 варианта - создать и зарегистрировать преобразователь или оберните метод в вопросе и преобразующие строки для нужных типов сами

+0

Да, есть ли какой-нибудь пример, как написать такой конвертер? –

+0

Несомненно. Google поможет найти его. Но обернуть содержимое репозитория каким-то классом было бы проще –

+0

уверен, я могу это сделать Google, но мой вопрос был больше о стандартном способе доступа к полю _TextIndexed_ через REST API. Другие методы поиска для полей _Indexed_ работают из коробки. Написание конвертера было бы вторым вариантом: –

 Смежные вопросы

  • Нет связанных вопросов^_^