2017-02-03 8 views
2

Я собираю все мои конечные точки api под базовым url /api/. Теперь я хочу разоблачить все доступные конечные точки, используя Spring-data-rest через HATEOAS, чтобы клиентское приложение могло обрабатывать эту информацию. По умолчанию это, кажется, работает из коробки, как GET /api/ возвращает все найденные пружине репозиториев и их соответствующие URL, как это:Расширить ссылки ресурса индекса данных Spring Data

{ 
    "_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