2014-09-02 78 views
0

我正在用spring boot 1.1.5构建一个MongoDb rest应用程序。我创建了一个信息库:找不到能够从java.lang.String类型转换为类型@ org.springframework.data.repository.query.Param的转换器

@RepositoryRestResource(collectionResourceRel = "SourceProductV1Repository", path = "SourceProductV1Repository") 
public interface SourceProductV1Repository extends MongoRepository<SourceProductV1Model, String> { 

    public List<SourceProductV1Model> findByUser (@Param("user") MongoUser user); 

} 

我定义了一个转换器,以字符串转换为MongoUser(转换器在Spring上下文正确注册):

@Component 
public class String2MongoUserConverter implements Converter<String, MongoUser>{ 
    private static final Log LOGGER = LogFactory.getLog(String2MongoUserConverter.class.getName()); 

    @Override 
    public MongoUser convert(String s) { 
     return null; 
    } 
} 

所以,当我尝试访问http://localhost:8080/SourceProductV1Repository/search/findByUser?user=test

我得到以下错误:

org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type java.lang.String to type @org.springframework.data.repository.query.Param com.ddelizia.model.MongoUser 
    at org.springframework.core.convert.support.GenericConversionService.handleConverterNotFound(GenericConversionService.java:291) 
    at org.springframework.core.convert.support.GenericConversionService.convert(GenericConversionService.java:177) 
    at org.springframework.data.rest.core.invoke.ReflectionRepositoryInvoker.prepareParameters(ReflectionRepositoryInvoker.java:265) 
    at org.springframework.data.rest.core.invoke.ReflectionRepositoryInvoker.invokeQueryMethod(ReflectionRepositoryInvoker.java:230) 
    at org.springframework.data.rest.webmvc.RepositorySearchController.executeQueryMethod(RepositorySearchController.java:236) 
    at org.springframework.data.rest.webmvc.RepositorySearchController.executeSearch(RepositorySearchController.java:146) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:215) 
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132) 
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104) 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:749) 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:689) 
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83) 
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:938) 
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870) 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961) 
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:852) 

我做错了什么?也许它在转换器中期待某种其他类型的目标?

+0

你确定转换器是否正确注册?你如何注册转换器?为什么转换器有一个'@ Repository'注释? – Jesper 2014-09-03 06:53:10

+0

这是我的错误..无论如何,我注册为'@组件'(我打印所有实例化的豆,我看到正在运行),但我得到了同样的错误..可以是'@参数'anotation(我使用Java 7) – ddelizia 2014-09-03 07:54:29

+0

我不认为只在应用程序上下文中注册转换器就足够了。查看文档:[使用自定义转换器覆盖默认映射](http://docs.spring.io/spring-data/data-mongo/docs/current/reference/html/mongo.core.html#mongo.custom-converters ) – Jesper 2014-09-03 09:05:35

回答

6

我固定在下面的方式创建豆:许多尝试

@Configuration 
public class MongoConvertersConfiguration { 

    @Resource(name = "defaultConversionService") 
    private GenericConversionService genericConversionService; 

    @Bean 
    public String2MongoUserConverter string2MongoUserConverter(){ 
     String2MongoUserConverter string2MongoUserConverter = new String2MongoUserConverter(); 
     genericConversionService.addConverter(string2MongoUserConverter); 
     return string2MongoUserConverter; 
    } 

} 
+0

嗨,你可以请张贴的String2MongoUserConverter定义片段 – Shiva 2018-01-10 04:53:01

0

后,我找到了这个解决方案

@PostConstruct 
public void init(){ 
    GenericConversionService conversionService = (GenericConversionService) DefaultConversionService.getSharedInstance(); 
    conversionService.addConverter(new JPAConverter()); 
} 

转换器和GenericConvert支持。

相关问题