2014-04-12 17 views
6

templated: true ile HAL bağlantılarının nasıl oluşturulacağını anlamaya çalışıyorum. BenSpring-hateoas kullanarak "templated: true" ile HAL linkleri nasıl oluşturulur?

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

kullanırsanız { ve } karakter hala kodlanmıştır. API ile 0.10.0.RELEASE olarak Spring-hateo ile şablon URL bağlantılarının nasıl oluşturulduğu hakkında bir fikriniz var mı?

Teşekkürler.

+1

Ben de bunu merak ediyorum..Sonra bu cevabı içeren cevabınıza bakarsanız dikkat edersiniz {ve} url kaçtı olacak ... hangisi doğru değil –

cevap

3

Ayrıca bunun HATEOAS API'sı kullanılarak yapılması gerektiğini merak ediyorum. Şimdilik, BasicLinkBuilder ve ControllerLinkBuilder sınıflarını kullanarak Link nesnelerini oluşturarak ve ardından bir new Link(String href) yapıcısına templated sorgu paramlarını ekleyerek çalıştık. İlginç bir şekilde, bu bir templated: true özniteliği ile bir Bağlantı oluşturur.

Biz çalışırken böyle cari istek üzerine değerlerden değiştirilmesi girişiminde bu değerler sonuçlandı LinkBuilder sınıfa {blog} gibi değerlere geçmek fark (yani linkbuilder Geçerli isteğin ?blog=value bulup içine value yerine çalışıyordu Bağlantı oluşturuldu ve bu olmadığından bir istisna neden oluyordu.

Çözüm, özellikle güzel olmasa da, ekibim API aracılığıyla LinkBuilders'a standartlaştırılmış paramlar elde etmenin hiçbir yolunu bulamadı. Sorun çıkarmadan

+0

Şablonlu bir yapı oluşturmak için UriTemplate kullanıyorum URI ve sonra yeni Link'e() geçin. Https://github.com/jiwhiz/JiwhizBlogWeb adresindeki https://www.jiwhiz.com/post/2014/4/Design_and_Build_RESTful_API_with_Spring_HATEOAS ve açık kaynaklı projem için bloguma bakın. Umarım Spring HATEOAS bunu yapmak için daha resmi bir API sağlayabilir. – jiwhiz

+0

Takımımın da geldiği yer hemen hemen aynı yerdeydi –

+0

@jiwhiz Tanımladığınızla aynı şeyi yapıyorum. Problem, "ControllerLinkBuilder" çözümlenmemiş değişkenlere izin vermeyen 'org.springframework.web.util.UriTemplate' komutunu kullanıyormuş gibi görünüyor. İş yapmak gibi görünüyor bir 'org.springframework.hateoas.UriTemplate' var ama daha sonra işlenen linkler hata ayıklayıcıda 'Link.isTemplated' yöntemi true döndüren görmekteyim olsa bile 'templated: true' özniteliği eksik. Ayrıca bağlantılar, bağlam yolunu önleyen oluşturucu sınıfı nedeniyle göreli olarak oluşturulur. al, ControllerLinkBuilder'de paket kapsamıdır. –

1

Bağlantıları parantez almak için bitti Biraz hacky çözüm ile, ancak geçici bir çözüm çalışır gibi:

  • oluşturmak sınıfı:
new BracketsLink(linkTo(methodOn(MessageController.class).message("{id}")).withRel("message")) 
:
public class BracketsLink extends Link { 
    public BracketsLink(Link link) { 
     super(link.getHref().replaceAll("%7B", "{").replaceAll("%7D", "}"), link.getRel()); 
    } 
} 
  • ve oluşturmak bağlantılar BracketsLink sınıfını kullanarak
İlgili konular