Wie kann ich mit JAXB oder Jackson bedingt serialisieren? Außenansicht vs. Innenansicht
Ich erstelle eine RESTful-API und habe einen Anwendungsfall, in dem ich in der Lage sein muss, zwei verschiedene Ansichten meiner Daten zu rendern. Eine, die wir intern verwenden können und eine, die wir extern verfügbar machen. Zusätzlich muss meine API sowohl XML als auch JSON unterstützen.
Für meine JSON-Antwort ist dies mit Jackson äußerst einfach zu bewerkstelligen. Mit der Funktion von JsonViews kann ich Felder bedingt in meine JSON-Antwort aufnehmen:http://wiki.fasterxml.com/JacksonJsonViews
Zuerst müssen Sie eine einfache Klasse erstellen, in der Ihre Ansichten angegeben sind:
public class Views {
public static class External {}
public static class Internal extends External {}
}
Jetzt beschrifte ich mit meinen Ansichtsklassen meine Felder mit der Ansicht, zu der sie gehören:
@JsonView(Views.External.class)
private String external = "External";
@JsonView(Views.Internal.class)
private String internal = "Internal";
Anschließend können Sie das Objekt serialisieren und angeben, welche Ansicht Sie verwenden möchten:
ObjectMapper jsonMapper = new ObjectMapper();
ObjectWriter externalWriter = jsonMapper.writerWithView(Views.External.class);
String externalJson = externalWriter.writeValueAsString(new ResponseObject());
Dies funktioniert gut für JSON, aber leider wird das Gleiche derzeit für XML nicht unterstützt. Wie kann ich dasselbe mit XML erreichen? Ich bin bereit, JAXB bei Bedarf für meine XML-Konvertierung zu verwenden.