2017-02-03 3 views
2

베이스 URL /api/ 아래의 모든 API 끝점을 매핑합니다. 이제 클라이언트 응용 프로그램에서 이러한 정보를 처리 할 수 ​​있도록 HATEOAS를 통해 spring-data-rest를 사용하여 사용 가능한 모든 끝점을 노출하려고합니다. 기본적으로이이 같은 GET /api/ 수익률로, 상자에서 발견 된 모든 봄 저장소 및 해당 URL을 작동하는 것 같다 :봄 데이터 나머지 인덱스 리소스 링크

{ 
    "_links" : { 
    "news" : { 
     "href" : "http://localhost:8080/api/news{?page,size,sort,projection}", 
     "templated" : true 
    } 
    } 
} 

그러나, 나는 다른 리소스에 대한 일부 사용자 지정 링크를 추가하고 싶습니다. 나는 이것을 시도했다 :

@RequestMapping("/api") 
public class AppController { 

    @RequestMapping("/") 
    public ResponseEntity<ResourceSupport> getEndpoints() { 
     ResourceSupport resource = new ResourceSupport(); 

     resource.add(linkTo(UserController.class).withRel("users")); 

     return new ResponseEntity<>(resource, HttpStatus.OK); 
    } 
} 

그러나 이것은 실제로 모든 것을 덮어 쓴다. 그래서 내 질문에 어떻게 일부 기본 사용자 정의 링크를 사용하여 기본 리소스에 대한 spring-data-rest의 표준 출력을 확장 할 수 있습니까?

+0

당신이하지 않은 : 여기

은 예입니다? –

답변

4

spring-data-rest을 사용하고 있다고 가정합니다.

당신이 작성해야 할 서비스의 인덱스 리소스에 대한 링크를 추가하는 ResourceProcessor<RepositoryLinksResource>

이 프로세서는 인덱스 자원이 생성 될 때 호출을 받고 인덱스 자원에 링크를 추가하는 데 사용할 수 있습니다. 당신이 스프링 데이터 받침대를 사용하는

/** 
* Adds custom controller links to the index resource 
*/ 
@Component 
public class RepositoryLinksResourceProcessor implements ResourceProcessor<RepositoryLinksResource> { 

    @Override 
    public RepositoryLinksResource process(RepositoryLinksResource resource) { 
     resource.add(linkTo(UserController.class).withRel("users")); 
     return resource; 
    } 
} 
+0

이것은 유망 해 보인다! 나는 월요일에 그것을 시험해 볼 것이다 :) – kenda