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?
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
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