2014-10-08 6 views
6

Es gibt einige Stellen, mit Composite Primärschlüsseln und diese Einheiten zu, wenn ausgesetzt sind, mit vollen qualifizierten Namen von Klassen in URL innerhalb falsche Links mit _linksWie @EmbeddedId Wandler in Spring Data REST

Auch auf Links klicken solche gibt Fehler -

org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type java.lang.String to type com.core.connection.domains.UserFriendshipId 

ich habe XML mit JPA Frühling Repository konfiguriert: Repositories aktiviert und Respository von JpaRepository erstreckt

Kann ich Repository machen implementieren org.springframework.core.convert.converter.Converter um damit umzugehen. Aktuelle Links wie unten bekommen -

_links: { 
userByFriendshipId: { 
href: "http://localhost:8080/api/userFriendships/[email protected]/userByFriendId" 
} 

in XML-Konfigurations habe ich JPA: Repositories aktiviert und @RestResource aktiviert innerhalb Repositorys

+0

Ich denke, hier Lösung wird RepositoryRestMvcConfiguration Unterklasse und Override configureConversionService. – fortm

Antwort

3

Zuerst müssen Sie einen brauchbaren Link. Derzeit wird Ihre Composite-ID als [email protected] angezeigt. Es sollte ausreichen, die toString-Methode von außer Kraft zu setzen, um etwas Nützliches wie 2-3 zu erzeugen.

Als nächstes müssen Sie eine converter so implementieren, dass 2-3 zurück in eine UserFriendshipId umgewandelt werden kann:

class UserFriendShipIdConverter implements Converter<String, UserFriendshipId> { 

    UserFriendShipId convert(String id) { 
    ... 
    } 
} 

Schließlich müssen Sie den Konverter registrieren. Sie schlug vor, bereits configureConversionService außer Kraft zu setzen:

protected void configureConversionService(ConfigurableConversionService conversionService) { 
    conversionService.addConverter(new UserFriendShipIdConverter()); 
} 

Wenn Sie eine XML-Konfigurations bevorzugen Sie die Anweisungen in der documentation folgen kann.

1

Um auf die akzeptierte Antwort zu erweitern .. Wenn Spring-Boot verwendet wird, um dies zur Arbeit zu bringen, musste meine Klasse, die RepositoryRestMvcConfiguration erweitert auch die @Configuration Annotation haben. Ich muß auch die folgende Anmerkung zu meiner Feder Boot-Anwendung Klasse hinzuzufügen:

@SpringBootApplication 
@Import(MyConfiguration.class) 
public class ApplicationContext { 

    public static void main(String[] args) { 
     SpringApplication.run(ApplicationContext.class,args); 
    } 
} 

ich auch die Super-Methode in meiner Methode aufgerufen, die überschreibt configureConversionService:

@Override 
    protected void configureConversionService(ConfigurableConversionService conversionService) { 
     super.configureConversionService(conversionService); 
     conversionService.addConverter(new TaskPlatformIdConverter()); 
    } 

dies den Standard Konverter bewahrt, und dann fügt Ihre

+0

Eine prägnantere Möglichkeit ohne 'configureConversionService()': http://stackoverflow.com/a/31830586/122441 –

Verwandte Themen