2014-10-08 18 views
6

Ci sono alcune Entità con compositi chiavi primarie e queste entità se esposti stanno avendo collegamenti errati che hanno nome completo qualificato di classi in URL all'interno _linksCome esporre convertitori EmbeddedId in Data primavera REST

anche cliccando sui link dà come errori -

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

ho XML configurati primavera repository con JPA: repository abilitati e Respository che si estende dal JpaRepository

Posso fare repository implementare org.springframework.core.convert.converter.Converter per gestire questo. Attualmente ottenere link come qui sotto -

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

in xml di configurazione, ho JPA: repository abilitati e @RestResource abilitato all'interno repository

+0

Penso che la soluzione sottoclassi RepositoryRestMvcConfiguration e sovrascriva configureConversionService. – fortm

risposta

3

In un primo momento è necessario per ottenere un link utilizzabile. Attualmente il tuo ID composito è esposto come [email protected]. Dovrebbe essere sufficiente per ignorare il metodo toString di UserFriendshipId per produrre qualcosa di utile come 2-3.

Dopodiché è necessario implementare un converter in modo che 2-3 può essere riconvertito ad un UserFriendshipId:

class UserFriendShipIdConverter implements Converter<String, UserFriendshipId> { 

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

Infine, è necessario registrare il convertitore. È già suggerito di ignorare configureConversionService:

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

Se si preferisce una configurazione XML è possibile seguire le istruzioni del documentation.

1

Per espandere la risposta accettata .. quando si utilizza spring-boot, per farlo funzionare, anche la classe che estende RepositoryRestMvcConfiguration deve avere l'annotazione @Configuration. Ho anche bisogno di aggiungere la seguente annotazione la mia primavera classe di applicazione di avvio:

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

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

Ho anche chiamato il metodo eccellente nel mio metodo che ignora configureConversionService:

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

Questo conserva i convertitori di default, e poi aggiungi il tuo

+0

Un modo più conciso senza bisogno di 'configureConversionService()': http://stackoverflow.com/a/31830586/122441 –

Problemi correlati