Comment mélanger les référentiels de données Spring et les contrôleurs Spring Repos

Actuellement, je suis en exposant un peu de Printemps, Référentiels de Données que les services RESTful en annotant avec @RepositoryRestResource comme ceci:

@RepositoryRestResource(collectionResourceRel = "thing1", path = "thing1")
public interface Thing1Repository extends PagingAndSortingRepository<Thing1, String> {}

@RepositoryRestResource(collectionResourceRel = "thing2", path = "thing2")
public interface Thing2Repository extends CrudRepository<Thing2, String> {}

Tout cela fonctionne très bien. Quand vous frappez mon premier point de terminaison est également présente tous les Printemps, Référentiels de Données que j'ai exposées, comme ceci:

{
   _links: {
      thing1: {
         href: "http://localhost:8080/thing1{?page,size,sort}",
         templated: true
      },
      thing2: {
         href: "http://localhost:8080/thing2"
      }
   }
}

Maintenant, j'ai quelques points de terminaison je veux exposer qui ne peut être représenté par le Printemps des Référentiels de Données, donc je suis en utilisant un RestController.

Voici un exemple simple:

@RestController
@ExposesResourceFor(Thing3.class)
@RequestMapping("/thing3")
public class Thing3Controller {

  @Autowired 
  EntityLinks entityLinks;

  @Autowired 
  Thing3DAO thing3DAO;

  //just assume Thing3.class extends ResourceSupport. I know this is wrong, but it makes the example shorter  
  @RequestMapping(value = "/{id}", produces = "application/json")
  Thing3 thing3(@PathVariable("id") String id)
  {
      Thing3 thing3 = thing3DAO.findOne(id);         

      Link link = entityLinks.linkToSingleResource(Thing3.class, id);
      thing3.add(link);

      return thing3;
  }
}

Maintenant, si je lance cette application et allez dans:

http://localhost:8080/thing3/{id} 

Je ne obtenir une représentation JSON de la Thing3 avec un lien vers elle-même, qui fonctionne comme prévu.

Ce que je veux comprendre comment le faire est d'avoir le premier point de terminaison également décrire ce contrôleur. En gros, je veux ceci:

{
   _links: {
      thing1: {
         href: "http://localhost:8080/thing1{?page,size,sort}",
         templated: true
      },
      thing2: {
         href: "http://localhost:8080/thing2"
      },
      thing3: {
         href: "http://localhost:8080/thing3"
      }
   }
}

Que dois-je faire pour obtenir mon point de terminaison d'avoir un lien avec ce contrôleur?

source d'informationauteur dspiegs