2014-12-09 7 views
14

Attualmente sto esponendo un paio di primavera dati Repository servizi come RESTful da indicandoli con @RepositoryRestResource come questo:Come mix di primavera dati Repository e controllori di primavera riposo

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

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

Tutto questo funziona alla grande. Quando si colpisce il mio primo punto finale è anche contiene tutti i dati Repository primavera ho esposto, in questo modo:

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

Ora ho alcuni punti finali che voglio esporre che non può essere rappresentato da primavera dati Repository, quindi sto usando un RestController.

Ecco un semplice esempio:

@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; 
    } 
} 

Ora, se faccio funzionare questa applicazione e andare a:

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

io capisco una rappresentazione JSON della Thing3 con un link a se stesso, che funziona come previsto.

Quello che voglio capire come fare è che il primo endpoint descriva anche questo controller. Io fondamentalmente voglio questo:

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

Che cosa devo fare per ottenere la mia endpoint base per avere un link a questo controller?

+0

possibile duplicato del [risposta su misura per la richiesta radice int primavera REST hateoas sia con RepositoryRestResource -s e controllori regolari] (http://stackoverflow.com/questions/25783487/custom-response-for-root-request-int-the-spring-rest-hateo-with-both-repositor) – zeroflagL

+1

come sei arrivato avere @RestController funziona con gli hateo primaverili? Inoltre, sto cercando di capire da dove viene il metodo 'thing3.add'. Come gestisci una raccolta di entità? – BigDong

risposta