복붙노트

[SPRING] 스프링 데이터 REST에서 @EmbeddedId 변환기를 노출하는 방법

SPRING

스프링 데이터 REST에서 @EmbeddedId 변환기를 노출하는 방법

복합 기본 키가있는 일부 엔터티가 있으며 이러한 엔터티에 _links 안에 URL의 클래스의 정규화 된 이름을 가진 잘못된 링크가있는 경우

또한 링크를 클릭하면 오류가 발생합니다.

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

나는 Jpa : repository가 활성화 된 XML 리포지토리와 JpaRepository에서 확장 된 Respository를 구성했습니다.

Repository가이를 처리하기 위해 org.springframework.core.convert.converter.Converter를 구현하도록 할 수 있습니까? 현재 아래와 같은 링크를 얻고 있습니다 -

_links: {
userByFriendshipId: {
href: "http://localhost:8080/api/userFriendships/com.core.connection.domains.UserFriendshipId@5b10/userByFriendId"
}

xml 구성에서 jpa : repositories가 활성화되고 @RestResource가 리포지토리 내부에서 활성화되었습니다.

해결법

  1. ==============================

    1.처음에는 유용한 링크를 얻어야합니다. 현재 복합 ID는 com.core.connection.domains.UserFriendshipId@5b10으로 표시됩니다. UserFriendshipId의 toString 메소드를 오버라이드하여 2-3과 같은 유용한 것을 만들어 내면 충분합니다.

    처음에는 유용한 링크를 얻어야합니다. 현재 복합 ID는 com.core.connection.domains.UserFriendshipId@5b10으로 표시됩니다. UserFriendshipId의 toString 메소드를 오버라이드하여 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 구성을 선호하는 경우 설명서의 지침을 따를 수 있습니다.

  2. ==============================

    2.받아 들여진 대답을 확장하려면 .. spring-boot를 사용할 때 이것을 작동 시키려면 RepositoryRestMvcConfiguration을 확장하는 클래스가 @Configuration 어노테이션을 가져야합니다. 또한 스프링 부트 애플리케이션 클래스에 다음 주석을 추가해야했습니다.

    받아 들여진 대답을 확장하려면 .. spring-boot를 사용할 때 이것을 작동 시키려면 RepositoryRestMvcConfiguration을 확장하는 클래스가 @Configuration 어노테이션을 가져야합니다. 또한 스프링 부트 애플리케이션 클래스에 다음 주석을 추가해야했습니다.

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

    configure 메소드를 오버라이드하는 메소드 내에서 super 메소드를 호출했다.

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

    이렇게하면 기본 변환기가 보존 된 다음 사용자가 추가됩니다.

  3. from https://stackoverflow.com/questions/26249506/how-to-expose-embeddedid-converters-in-spring-data-rest by cc-by-sa and MIT license