2014-04-12 7 views
6

Sto cercando di capire come creare collegamenti HAL con templated: true. Se usoCome creare collegamenti HAL con "templated: true" usando Spring-hateoas?

BasicLinkBuilder.linkToCurrentMapping().slash("api/public/blogs/{blog}").withRel("blog"); 

I { e } caratteri sono ancora codificati. Qualche idea su come costruire collegamenti a URL modello con Spring-hateo come 0.10.0.RELEASE tramite la sua API?

Grazie.

+1

anch'io mi sto chiedendo questo ... Inoltre noterai se osservi la tua risposta che include quel collegamento che {e} sarà stato url scappato ... il che non è corretto –

risposta

3

Mi sto anche chiedendo come questo dovrebbe essere fatto usando l'API HATEOAS. Per ora abbiamo lavorato attorno a esso generando gli oggetti Link utilizzando le classi BasicLinkBuilder e ControllerLinkBuilder e quindi aggiungendo i parametri di query su modelli in un costruttore new Link(String href). È interessante notare che questo crea un collegamento con un attributo templated: true.

abbiamo notato che il tentativo di passare in valori quali {blog} nelle classi LinkBuilder chiuso in questi valori che tentano di essere sostituiti dai valori sulla richiesta corrente (cioè il LinkBuilder stava tentando di trovare ?blog=value dalla richiesta corrente e sostituire value in il Link in costruzione e che non esisteva causava un'eccezione

Anche se la soluzione non è particolarmente piacevole, la mia squadra non è stata in grado di trovare alcun modo di ottenere parametri con modelli nei LinkBuilder tramite l'API senza problemi.

+0

Sto usando UriTemplate per costruire un modello URI e quindi passare al nuovo collegamento(). Vedi il mio blog https://www.jiwhiz.com/post/2014/4/Design_and_Build_RESTful_API_with_Spring_HATEOAS e il mio progetto open source su https://github.com/jiwhiz/JiwhizBlogWeb. Spero che Spring HATEOAS possa fornire API più formali per farlo. – jiwhiz

+0

Questo è praticamente lo stesso posto in cui è arrivata anche la mia squadra –

+0

@jiwhiz Sto facendo praticamente lo stesso come hai descritto. Sembra che il problema "ControllerLinkBuilder" usi 'org.springframework.web.util.UriTemplate' che non consente variabili non risolte. C'è un 'org.springframework.hateoas.UriTemplate' che sembra fare il lavoro ma poi i link quando sono resi mancano attributo' templated: true' anche se nel debugger vedo il metodo 'Link.isTemplated' che restituisce true. Anche i collegamenti sono resi relativi perché la classe del costruttore che antepone il percorso di contesto et. al è lo scope del pacchetto in 'ControllerLinkBuilder'. –

1

Per ottenere parentesi nei collegamenti, ho finito con una soluzione hacky po ', ma come una soluzione temporale funziona:

  • creare classe:
public class BracketsLink extends Link { 
    public BracketsLink(Link link) { 
     super(link.getHref().replaceAll("%7B", "{").replaceAll("%7D", "}"), link.getRel()); 
    } 
} 
  • e creare collegamenti con BracketsLink classe:
new BracketsLink(linkTo(methodOn(MessageController.class).message("{id}")).withRel("message"))