복붙노트

[SPRING] 발췌 프로젝션이 Spring Data REST 항목 리소스에 자동으로 적용되지 않는 이유는 무엇입니까?

SPRING

발췌 프로젝션이 Spring Data REST 항목 리소스에 자동으로 적용되지 않는 이유는 무엇입니까?

중첩 된 엔티티를 노출해야하는 돌출을 만들었습니다.

@Projection(name = "inlineBusiness", types = { UserModel.class })
public interface InlineBusinessUserModelProjection {

    String getUsername();

    String getFirstName();

    String getLastName();

    Date getBirthdate();

    String getEmail();

    BusinessModel getBusiness();
}

그리고 서비스 저장소 :

@RepositoryRestResource(collectionResourceRel = "users", path = "users",
       excerptProjection = InlineBusinessUserModelProjection.class)
public interface UserRepository extends BaseDAO<UserModel> {..}

for / users 잘 작동하지만, 비즈니스 필드는 중첩 된 엔티티로 노출되지만, / users / 1- 아무것도 호출하지 않으면 모든 사용자 정의 메소드가됩니다. 프로젝션과 같은 것은 / users를 제외한 모든 메소드와 관련이없는 것 같습니다 어떤 아이디어?

해결법

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

    1.그것은 설계된대로 작동합니다. _placement 절에서 대상 유형 (사용자의 경우 UserModel)의 인스턴스가 사용될 때마다 발췌 프로젝션이 사용됩니다. 따라서 발췌 부분은 리소스 자체가 렌더링되지 않지만 지적되는 모든 곳에서 사용되는 일종의 미리보기입니다. 이는 대개 수집 자원 또는 연관의 경우입니다.

    그것은 설계된대로 작동합니다. _placement 절에서 대상 유형 (사용자의 경우 UserModel)의 인스턴스가 사용될 때마다 발췌 프로젝션이 사용됩니다. 따라서 발췌 부분은 리소스 자체가 렌더링되지 않지만 지적되는 모든 곳에서 사용되는 일종의 미리보기입니다. 이는 대개 수집 자원 또는 연관의 경우입니다.

    아이템 리소스에 대해 기본적으로 발췌 프로젝션을 사용하는 것은 다른 관점에서 볼 때 실제로 이해가되지 않습니다. 발췌 프로젝션은 일부 도메인 객체에 대한 읽기 전용 뷰입니다. 기본적으로 항목 리소스에 대한보기를 반환하는 경우 클라이언트는 리소스를 업데이트하기 위해 보낼 데이터를 어떻게 알 수 있습니까? 발췌문 용으로 생성 된 JSON 문서는 단순히 가져 와서 수정할 수 없으며 정의에 따라 리소스를 업데이트하기 위해 PUT 요청을 보내는 데 사용할 수 없습니다.

    항목 리소스에 투영을 적용하려면 투영 URI 템플릿 변수에 투영 이름을 채 웁니다.

    편집 : 수동으로 선택하면 투영이 적용되지 않는 경우 InlineBusinessUserModelProjection이 실제로 일반 용도로 등록되어 있는지 확인하십시오. 유형이 UserModel의 동일한 패키지 또는 하위 패키지에 있는지 확인하십시오. 또는 RepositoryRestConfiguration.projectionConfiguration (). addProjection (...)을 통해 투영을 수동으로 등록하십시오. 수동 구성을 사용하면 투영 유형에서 @Projection을 사용할 수 없게됩니다.

    Spring Data REST 참조 문서에서이 주제에 대해 더 자세히 읽어보십시오.

  2. from https://stackoverflow.com/questions/30220333/why-is-an-excerpt-projection-not-applied-automatically-for-a-spring-data-rest-it by cc-by-sa and MIT license