Keine Konverter gefunden, die in der Lage Umwandlung von Typ java.lang.String-Typ - @org.springframework.Daten.repository.Abfrage.Param

Baue ich eine MongoDb rest-Anwendung mit spring boot 1.1.5. Habe ich einen repository:

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

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

}

Definierte ich ein converter zum konvertieren von String zu MongoUser (der Konverter ordnungsgemäß registriert in den spring-Kontext):

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

So, wenn ich versuche, auf http://localhost:8080/SourceProductV1Repository/search/findByUser?user=test

Bekomme ich die folgende Fehlermeldung:

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)

)

Was ich falsch mache? vielleicht ist es erwartet, irgendeine Art von anderer Art als Ziel in den Konverter?

  • Sind Sie sicher, dass der Konverter ordnungsgemäß registriert ist? Wie sind Sie mit der Registrierung der Konverter? Warum hat der Konverter eine @Repository annotation?
  • Das war mein Fehler.. naja ich registrierte es wie @Component (druckte ich alle instanziierten beans und ich sehe läuft), aber ich bekomme den selben Fehler.. Kann auch etwas sein, mit @Param anotation (ich bin mit java 7)
  • Ich denke nicht, dass nur die Registrierung der Konverter im app-Kontext ist genug. Siehe die Dokumentation: Überschreiben des Standard-mapping mit benutzerdefinierter Konverter
InformationsquelleAutor ddelizia | 2014-09-02
Schreibe einen Kommentar