2014-06-17 4 views
7

스프링 데이터 REST를 사용하여 프로젝트 목록 작성 및 CRUD 작업을 지원하는 ProjectRepository을 공개했습니다. 내가 http://localhost:8080/projects/에 갈 때 나는 기대했던 프로젝트 목록을 얻는다.스프링 데이터의 콜렉션 엔티티에 대한 노출 표시 REST

내가하려는 것은 프로젝트 컬렉션에 대한 JSON 응답의 _links 섹션에 사용자 지정 작업을 추가하는 것입니다.

예를 들어, 나는 이런 식으로 뭔가를 반환하는 http://localhost:8080/projects/에 전화를하고 싶습니다 : customAction 일부 컨트롤러에 정의되어

{ 
    "_links" : { 
    "self" : { 
     "href" : "http://localhost:8080/projects/{?page,size,sort}", 
     "templated" : true 
    }, 
    "search" : { 
     "href" : "http://localhost:8080/projects/search" 
    }, 
    "customAction" : { 
     "href" : "http://localhost:8080/projects/customAction" 
    } 
    }, 
    "page" : { 
    "size" : 20, 
    "totalElements" : 0, 
    "totalPages" : 0, 
    "number" : 0 
    } 
} 

. 나는 다음과 같은 클래스를 만드는 시도했습니다

:

public class ProjectCollectionResourceProcessor implements ResourceProcessor<Resource<Collection<Project>>> { 

    @Override 
    public Resource<Collection<Project>> process(Resource<Collection<Project>> listResource) { 
     // code to add the links to customAction here 
     return listResource; 
    } 

} 

및 추가 내 응용 프로그램 구성에 다음 콩을 추가 :

@Bean 
public ProjectCollectionResourceProcessor projectCollectionResourceProcessor() { 
    return new ProjectCollectionResourceProcessor(); 
} 

을하지만 process(...) 않습니다 이제까지 전화를받을 수가 없어. 리소스 모음에 링크를 추가하는 올바른 방법은 무엇입니까?

+0

가보기,이 질문은 : http://stackoverflow.com/q/40156413 –

답변

4

컬렉션 리소스는 Resources<Resource<Project>>이 아닌 Resource<Collection<Project>>의 인스턴스를 렌더링합니다. 따라서 예상대로 작동해야하는 ResourceProcessor 구현의 일반 입력을 변경하면됩니다.

+0

코드 아래에 추가하는 공용 클래스 ProjectsResourceProcessor이 \t \t ResourceProcessor 구현 '도움이되지 않았다 <자원 > { \t @Autowired \t 개인 EntityLinks entityLinks; \t @Override \t 공공 자원 과정 (참고 자료 자원) { \t \t resources.add (entityLinks.linkFor (Project.class) .slash ("사용자") \t \t \t \t .withRel ("사용자 정의")); \t \t 반환 리소스; \t} }'SDR-2.1.0.RELEASE – Stackee007

+0

사용하기 위해서는 ResourceProcessor 를 구현해야하고 코드 내에 'Project' 리소스가 있는지 확인해야합니다. 도와 주셔서 감사합니다. –

+0

@ thorben.jakobsen 저는 솔루션을 구현하기 위해 몇 가지 리소스 (학습용 :-)를 찾고 있습니다. 나는 페이징 리소스도 가지고있다. – Stephane

4

나는 동일한 문제가있었습니다. 무엇 나를 위해 일한 것은이었다

public class ProjectsResourceProcessor implements ResourceProcessor<PagedResources<Resource<Project>>> { 

    private final @NonNull EntityLinks entityLinks; 

    @Override 
    public PagedResources<Resource<Project>> process(PagedResources<Resource<Project>> pagedResources) { 

     ... 

     return pagedResources; 
    } 
} 
+0

의 내 페이징 된 집계 루트에 대해 호출되지 않습니다. 링크가 표시되지 않습니다. '( – Kakawait

+0

ResourcesProcessorWrapper :: isValueTypeMatch 빈 콘텐츠에 대해 리소스 프로세서가 실행되지 않도록합니다. –

+2

yup이 (가) 같은 문제에 직면했습니다.이를 극복하기위한 모든 해킹 –

관련 문제