Как выставить преобразователи @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());
    }

это сохраняет преобразователи по умолчанию, а затем добавляет ваш