2016-04-18 21 views
0

Ich habe eine Feder-API, die der Benutzer die JSONView jeden Anruf angeben kann, eine Ansicht param mit etwa so:Frühling Rest Controller Ergebnis Umwickeln mit JSONView/MappingJacksonValue

/api/v1/person/1?view=viewName 

ich dann Spring MappingJacksonValue verwende die festlegen korrekte Ansicht dynamisch statt @JsonView() Annotation verwenden und schließlich die ich nur zurück MappingJacksonValue Instanz, die etwas entlang der Linien von

[ 
    { id: 1 }, 
    { id: 2 } 
] 

ich für das Leben von mir kann nicht herausfinden produziert, wie leicht mein MappingJacksonValue wickeln die Serialisierung völlig ignoriert auch die MappingJacksonValue Ansicht und es - Instanzen in einem ObjectNode so, dass ich alle API Ergebnisse aus dem Snippet oben auf diesen

<> aber das hat nicht funktioniert
{ 
    "data" : [ 
     { id: 1 }, 
     { id: 2 } 
    ] 
} 

Ich habe versucht, mit einem normalen HashMap ändern produziert Map-spezifische Ergebnisse

{ 
    data: { 
     value: [], 
     serializationView: "com.blah.models.view.View$Id", 
     filters: null, 
     jsonpFunction: null 
    } 
} 

So kann jemand mich wissen lassen, was ist der beste Weg, um Ergebnisverpackung in meinem Szenario zu erreichen?

Vielen Dank im Voraus!

Antwort

1

Wenn jemand auf diesen Beitrag stößt, um das gleiche zu tun, realisierte ich, dass ich das Problem falsch anschaute. Ich landete eine ServiceResponse Klasse erstellen und das Objekt dort, also im Wesentlichen

public class ServiceResponse { 

    @JsonView(View.Id.class) 
    private Object data; 

    public ServiceResponse (Object data) { 
     this.data = data; 
    } 
} 

wie so verpackt, anstatt Rückkehr new MappingJacksonValue(someReturnObject) ich Rückkehr new MappingJacksonValue(new ServiceResponse(someReturnObject)). Auf diese Weise ist alles in einem data JSON-Objekt verpackt und die setSerializationView Methode filtert meine Objekte immer noch richtig.

Ich hoffe, das hilft jemandem.