Как выставить преобразователи @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());
}
это сохраняет преобразователи по умолчанию, а затем добавляет ваш