2015-04-16 8 views
7

Zuerst überhaupt las ich die vorherige Frage: Exposing link on collection entity in spring data RESTOffenlegen von Hypermedia-Links auf der Sammlung selbst ist es leer mit Spring Data Erholung

Aber das Problem noch ohne Trick bestehen.

der Tat, wenn ich einen Link für eine Sammlung Ressourcen verfügbar machen möchten Ich bin mit dem folgenden Code:

@Component 
public class FooProcessor implements ResourceProcessor<PagedResources<Resource<Foo>>> { 

    private final FooLinks fooLinks; 

    @Inject 
    public FooProcessor(FooLinks fooLinks) { 
     this.FooLinks = fooLinks; 
    } 

    @Override 
    public PagedResources<Resource<Foo>> process(PagedResources<Resource<Foo>> resource) { 
     resource.add(fooLinks.getMyCustomLink()); 
     return resource; 
    } 
} 

das richtig funktioniert, wenn außer Sammlung leer ist ...

die einzige Weg zu Arbeiten ist es, meinen folgenden Code zu ersetzen durch:

Aber damit wird der Link für alle Sammlung ausgesetzt werden s.

Ich kann Bedingung für die Belichtung nur für das, was ich will, aber ich glaube nicht, ist sauber.

Antwort

2

Ich denke, der Frühling macht etwas Magie dort zu versuchen, den Typ der Sammlung zu entdecken - auf einer leeren Sammlung können Sie nicht sagen, welcher Typ es ist - so kann Spring-Data-Rest nicht bestimmen, welchen ResourceProcessor zu verwenden.

Ich glaube, ich habe in org.springframework.data.rest.webmvc.ResourceProcessorHandlerMethodReturnValueHandler.ResourcesProcessorWrapper#isValueTypeMatch gesehen, dass sie versuchen, die Art zu bestimmen, indem in der Sammlung auf dem ersten Element suchen und sonst nur stoppen Verarbeitung:

if (content.isEmpty()) { 
    return false; 
} 

Also ich denke, Sie nicht diese mit Feder lösen kann -Datenruhe. Für deinen Controller könntest du auf einen benutzerdefinierten Controller zurückgreifen und Frühlings-Hassoas verwenden und deinen eigenen ResourceAssemblerSupport implementieren, um den Link auch in leeren Sammlungen zu sehen.

Verwandte Themen