2014-04-12 11 views
6

Ich versuche herauszufinden, wie man HAL-Links mit templated: true erstellen. Wenn ichWie man HAL-Links mit "templated: true" mit Spring-hateas erstellt?

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

Die { und } Zeichen sind noch verschlüsselt. Irgendeine Idee, wie Vorlage URL-Links mit Spring-hateo als 0.10.0.RELEASE von seiner API zu erstellen?

Danke.

+1

Ich frage mich auch das ... weiter wirst du feststellen, wenn du dir deine Antwort anschaust, die den Link enthält, dass die {und} URL entwichen ist ... was nicht richtig ist –

Antwort

3

Ich frage mich auch, wie dies mit der HATEOAS-API geschehen soll. Im Moment haben wir daran gearbeitet, indem wir die Link-Objekte mit den BasicLinkBuilder- und ControllerLinkBuilder-Klassen generiert haben und dann die templated-Abfrageparameter in einen -Konstruktor eingefügt haben. Interessanterweise baut dies einen Link mit einem templated: true Attribut auf.

Wir haben festgestellt, dass der Versuch in Werten passieren wie {blog} in die LinkBuilder Klassen endeten in diesen Werten versuchen, von den Werten auf der aktuellen Anforderung ersetzt werden (dh die linkbuilder versuchen ?blog=value die aktuelle Anforderung zu finden und ersetzen value in der Link, der erstellt wird, und da dies nicht existierte, verursachte eine Ausnahme.

Obwohl die Problemumgehung nicht besonders nett ist, war mein Team nicht in der Lage, Vorlagen über die API in die LinkBuilders zu bekommen ohne

+0

Ich benutze UriTemplate, um ein Template zu erstellen URI und dann an neuen Link() übergeben. Siehe mein Blog https://www.jiwhiz.com/post/2014/4/Design_and_Build_RESTful_API_with_Spring_HATEOAS und mein Open-Source-Projekt unter https://github.com/jiwhiz/JiwhizBlogWeb. Ich hoffe, dass Spring HATEOAS dafür eine formellere API bereitstellen kann. – jiwhiz

+0

Das ist ziemlich genau der gleiche Ort, an dem auch mein Team ist –

+0

@jiwhiz Ich mache ziemlich genau das selbe wie du beschrieben hast. Problem scheint zu sein, dass 'ControllerLinkBuilder' die' org.springframework.web.util.UriTemplate' verwendet, die keine nicht aufgelösten Variablen erlaubt. Es gibt eine 'org.springframework.hateoas.UriTemplate', die den Job zu erledigen scheint, aber dann fehlt den Links beim Rendern das Attribut 'templated: true', obwohl ich im Debugger die' Link.isTemplated'-Methode als wahr ansehe. Auch die Links werden relativ wiedergegeben, da die Builder-Klasse den Kontextpfad et vorgibt. al ist der Paketumfang in 'ControllerLinkBuilder'. –

1

Um Klammern in Links zu bekommen, bin ich gelandet mit ein wenig hacky Lösung, sondern als eine zeitliche Abhilfe funktioniert:

  • erstellen Klasse:
public class BracketsLink extends Link { 
    public BracketsLink(Link link) { 
     super(link.getHref().replaceAll("%7B", "{").replaceAll("%7D", "}"), link.getRel()); 
    } 
} 
  • und erstellen Sie Links mit BracketsLink Klasse:
new BracketsLink(linkTo(methodOn(MessageController.class).message("{id}")).withRel("message"))