복붙노트

[SPRING] Spring Data REST 쿼리 메소드 리소스에 프로젝션을 적용하려면 어떻게해야합니까?

SPRING

Spring Data REST 쿼리 메소드 리소스에 프로젝션을 적용하려면 어떻게해야합니까?

나는 스프링 데이터 REST 2.1.4를 사용하고있다. 릴리스.

내가 만들었다

클라이언트는 ... / rest / booking으로 모든 예약을받으며 JSON 응답에는 링크 된 엔티티에 대한 링크가 포함됩니다. ? projection = details를 추가하면 연결된 엔터티가 분해되어 반환됩니다. 그리고 이것은 대단합니다.

이제이 사용자 정의 메소드를 저장소에 추가합니다.

List<Booking> findByApplicant(@Param("applicant") Person applicant);

클라이언트가 ... / rest / bookings / search / findByApplicant? applicant = 5를 사용하여 클라이언트를 호출하면 세부 정보 프로젝션을 요청할 수있는 방법이없는 것으로 보입니다. 다음 시도는 무시됩니다.

요약하면, 사용자 정의 검색 메소드 (findBy *)는 결코 투영을 반환하지 않습니다. @RepositoryRestResource (excerptProjection = BookingDetails.class)를 사용하여 저장소에 주석을 작성하지 않는 한 몇 가지 문제가 발생합니다. 먼저 모든 클라이언트가 항상 동일한 프로젝션을 사용해야합니다. findBy * 메소드에서도 투영을 사용하도록 사용자를 허용 할 수 있습니까?

해결법

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

    1.스프링 데이터 REST 2.2.1에서이 작업을 검증 했으므로 업데이트하십시오. 원하는대로 클라이언트가 실제로 요청 된 매개 변수를 전송하는지 확인하십시오. 디버깅하는 동안 나는 그것을 발견했다. cURL은 URI를 명시 적으로 인용하지 않으면 쿼리 매개 변수를 삭제합니다. 그래서 이건:

    스프링 데이터 REST 2.2.1에서이 작업을 검증 했으므로 업데이트하십시오. 원하는대로 클라이언트가 실제로 요청 된 매개 변수를 전송하는지 확인하십시오. 디버깅하는 동안 나는 그것을 발견했다. cURL은 URI를 명시 적으로 인용하지 않으면 쿼리 매개 변수를 삭제합니다. 그래서 이건:

    curl http://localhost:8080/orders/search/findByApplicant?applicant=5&projection=details
    

    어떤 쿼리 매개 변수도 보내지 않습니다. URI를 인용하면 URI가 인용됩니다.

    curl 'http://localhost:8080/orders/search/findByApplicant?applicant=5&projection=details'
    

    점차 인기를 누리고있는 HTTPie에 대한 정렬이 동일합니다. 필요한 구문은 다음과 같습니다.

    http :8080/orders/search/findByApplicant applicant==5 projection==details
    

    그런 식으로 작동시키지 못하는 경우를 대비해 실행중인 예제 프로젝트를 살펴 보는 것이 좋습니다.

  2. from https://stackoverflow.com/questions/28362756/how-do-i-apply-a-projection-to-a-spring-data-rest-query-method-resource by cc-by-sa and MIT license