2017-11-20 27 views
0

내 앱에서 Things와 Stuff간에 외래 키 관계가 있는데, 주어진 Thing에는 수백 개의 Stuff가 들어있을 수 있습니다. Spring Data JPA를 사용하여 Thing 및 Stuff 저장소를 노출한다.Spring HATEOS로 JPA 리포지토리 쿼리 메서드에 연결하려고 시도하는 중 IllegalArgumentException이 발생합니다. 'uriTemplate'은 null이 아니어야합니다.

선택한 사용자와 관련된 모든 항목을 표시하고 싶지만 반환 할 항목 크기 때문에 항목 결과를 페이지에 넣고 싶습니다.

검색은 것 반환에서 포함 된 물건 링크에 페이징 기능을 추가 할 수 없습니다 것을 보여 주었다, 나의 것 저장소에서 반환 아래의 링크를 페이징되지 않을 수 있습니다

"stuff": { 
    "href": "http://localhost:8080/api/things/1/stuff" 
} 

그래서 내가 가진 내 물건 저장소에 사용자 정의 메서드를 추가하여 물건 ID로 모든 물건을 가져오고, 직접 호출 할 때 제대로 작동합니다.

나는 모든 지을 수 있었던 물건을 얻을 수있는 사용자 정의 검색 방법을 가리키는 것은 자원의 반환에 링크를 추가 할,하지만 난 ControllerLinkBuilder.linkTo() 메서드를 사용할 때 그것은

java.lang.IllegalArgumentException: 'uriTemplate' must not be null 
at org.springframework.util.Assert.hasText(Assert.java:181) ~[spring-core-4.3.11.RELEASE.jar:4.3.11.RELEASE] 
at org.springframework.web.util.UriTemplate.<init>(UriTemplate.java:61) ~[spring-web-4.3.11.RELEASE.jar:4.3.11.RELEASE] 

물건 실패 리포 :

public interface StuffRepo extends JpaRepository<Stuff, Long> { 

    Page<Stuff> findByThingId(@Param("thingId") Long thingId, Pageable pageable); 
} 

구성 :

@Bean 
ThingProcessor getThingProcessor() 
{ 
    return new ThingProcessor(); 
} 

public static class ThingProcessor implements ResourceProcessor<Resource<Thing>>{ 
    @Override 
    public Resource<Thing> process(Resource<Thing> resource) { 
     ControllerLinkBuilder.linkTo(ControllerLinkBuilder.methodOn(StuffRepo.class).findByThingId(resource.getContent().id, null)); 
     return resource; 
    } 
} 

암 I 누락의 주석 주석 또는 구성? Repo 및 메서드에 @RestResource 주석을 달았으며 아무런 차이가 없습니다. 또한 하위 개체에 대해 페이징 된 결과를 얻는 더 좋은 방법이 있습니까?

답변

0

나는 당신에게 링크 개체의 목록을 제공하는 RepositoryEntityLinks 클래스를 사용하여이 문제를 얻고, 거기에서 나는 link.getRel()

를 사용하여 필요한 것을 찾기