Как выставить преобразователи @EmbeddedId в Spring Data REST
есть некоторые сущности с составными первичными ключами, и эти сущности при отображении имеют неправильные ссылки, имеющие полное полное имя классов в URL внутри _links
также нажатие на ссылки дает такие ошибки -
org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type java.lang.String to type com.core.connection.domains.UserFriendshipId
У меня есть XML-настроенный Spring Repository с JPA: репозитории включены и Respository, расширяющиеся от JpaRepository
могу ли я сделать реализацию репозитория org.springframework.ядро.конвертировать.конвертер.Конвертер чтобы справиться с этим. В настоящее время получение ссылок, как показано ниже -
_links: {
userByFriendshipId: {
href: "http://localhost:8080/api/userFriendships/com.core.connection.domains.UserFriendshipId@5b10/userByFriendId"
}
в конфигурации xml у меня есть JPA:репозитории включены и @RestResource включен внутри репозиториев
2 ответов
сначала вам нужно получить полезную ссылку. В настоящее время ваш составной id отображается как com.core.connection.domains.UserFriendshipId@5b10. Этого должно быть достаточно, чтобы переопределить toString метод UserFriendshipIdпроизводить что-то полезное, как 2-3.
Далее вам нужно реализовать конвертер, так что 2-3 может быть преобразован обратно в UserFriendshipId:
class UserFriendShipIdConverter implements Converter<String, UserFriendshipId> {
UserFriendShipId convert(String id) {
...
}
}
наконец, вам нужно зарегистрировать конвертер. Вы уже предложили переопределить configureConversionService:
protected void configureConversionService(ConfigurableConversionService conversionService) {
conversionService.addConverter(new UserFriendShipIdConverter());
}
если вы предпочитаете Конфигурации XML, вы можете следовать инструкциям в документация.
чтобы расширить принятый ответ.. при использовании spring-boot, чтобы заставить это работать, мой класс, который расширяет RepositoryRestMvcConfiguration также необходимо иметь @Configuration Примечание. Мне также нужно было добавить следующую аннотацию к моему классу приложений spring boot:
@SpringBootApplication
@Import(MyConfiguration.class)
public class ApplicationContext {
public static void main(String[] args) {
SpringApplication.run(ApplicationContext.class,args);
}
}
Я также вызвал супер метод в моем методе, который переопределяет configureConversionService:
@Override
protected void configureConversionService(ConfigurableConversionService conversionService) {
super.configureConversionService(conversionService);
conversionService.addConverter(new TaskPlatformIdConverter());
}
это сохраняет преобразователи по умолчанию, а затем добавляет ваш