2014-06-17 18 views
7

Yay verilerini kullanarak REST I listeleme projelerini destekleyen ve bunlarda CRUD işlemleri gerçekleştiren bir ProjectRepository. http://localhost:8080/projects/'a gittiğimde beklediğim gibi proje listesini alırım.Yay verisinde toplama varlığı üzerindeki bağlantıyı gösterme REST

Yapmaya çalıştığım şey, Proje Toplama için JSON yanıtının _links bölümüne özel bir eylem eklemektir.

Örneğin, böyle bir şey dönmek için http://localhost:8080/projects/ çağrısını istiyorum: customAction bazı denetleyici tanımlanan

{ 
    "_links" : { 
    "self" : { 
     "href" : "http://localhost:8080/projects/{?page,size,sort}", 
     "templated" : true 
    }, 
    "search" : { 
     "href" : "http://localhost:8080/projects/search" 
    }, 
    "customAction" : { 
     "href" : "http://localhost:8080/projects/customAction" 
    } 
    }, 
    "page" : { 
    "size" : 20, 
    "totalElements" : 0, 
    "totalPages" : 0, 
    "number" : 0 
    } 
} 

. Ben aşağıdaki sınıf oluşturarak denedim

:

public class ProjectCollectionResourceProcessor implements ResourceProcessor<Resource<Collection<Project>>> { 

    @Override 
    public Resource<Collection<Project>> process(Resource<Collection<Project>> listResource) { 
     // code to add the links to customAction here 
     return listResource; 
    } 

} 

ve ekleme uygulamalarım yapılandırmaya aşağıdaki Bean ekleyerek:

@Bean 
public ProjectCollectionResourceProcessor projectCollectionResourceProcessor() { 
    return new ProjectCollectionResourceProcessor(); 
} 

Ama process(...) yapar hiç denilen olsun görünmüyor. Kaynak koleksiyonlarına bağlantı eklemenin doğru yolu nedir?

+0

Ayrıca bkz, bu soru: http://stackoverflow.com/q/40156413 –

cevap

4

Toplama kaynakları, örneğini, Resource<Collection<Project>> değil, oluşturur. Bu nedenle, ResourceProcessor uygulamanızdaki genel yazmayı, beklediğiniz gibi çalışacak şekilde değiştirirseniz.

+0

kodunun altına ekleyerek public class ProjectsResourceProcessor \t \t ResourceProcessor uygulayan 'yardımcı olmadı > { \t @Outowired \t private EntityLinks entityLinks; \t @Override \t kamu Kaynakları işlemi (Kaynaklar kaynaklar) { \t \t resources.add (entityLinks.linkFor (Project.class) .slash ("özel") \t \t \t \t .withRel ("özel")); \t \t kaynakları; \t} } 'bana ben bir' Project' kaynak olmadığını belirlemek 'ResourceProcessor ' ve içinde kod uygulamak zorunda işe gitmek için için için SDR-2.1.0.RELEASE – Stackee007

+0

kullanma. Yardım için teşekkürler. –

+0

@ thorben.jakobsen Bazı kaynakları (çözümünüzü uygulamak için :-) öğreniyorum) arıyorum. Ayrıca disk belleği kaynağım var. – Stephane

4

Aynı sorunu yaşadım. Ne benim için çalıştı oldu:

public class ProjectsResourceProcessor implements ResourceProcessor<PagedResources<Resource<Project>>> { 

    private final @NonNull EntityLinks entityLinks; 

    @Override 
    public PagedResources<Resource<Project>> process(PagedResources<Resource<Project>> pagedResources) { 

     ... 

     return pagedResources; 
    } 
} 
+0

numaralı sayfalarının disk belleği kümesinin köklenmesi için çağrılmayacak, bağlantılar görünmüyor: '( – Kakawait

+0

Denetlemek için ResourcesProcessorWrapper :: isValueTypeMatch öğesinde açık bir kontrol var boş içerik için ve kaynak işlemcisinin ateşlemesini önler .. –

+2

yup aynı sorunla karşı karşıya gelir .. bunun üstesinden gelmek için herhangi bir hack –