Jak warunkowo serializować za pomocą JAXB lub Jacksona? Widok zewnętrzny a widok wewnętrzny
Buduję API RESTful i mam przypadek użycia, w którym muszę być w stanie renderować dwa różne widoki moich danych. Jedną, którą możemy wykorzystać wewnętrznie i taką, którą ujawnimy zewnętrznie. Dodatkowo mój interfejs API musi obsługiwać zarówno XML, jak i JSON.
Dla mojej odpowiedzi JSON jest to niezwykle łatwe do zrobienia z Jacksonem. Mogę warunkowo uwzględnić pola w odpowiedzi JSON za pomocą funkcji JsonViews:http://wiki.fasterxml.com/JacksonJsonViews
Najpierw musisz utworzyć prostą klasę określającą swoje poglądy:
public class Views {
public static class External {}
public static class Internal extends External {}
}
Teraz z moimi klasami widoków opisuję tylko moje pola, do których należą, w ten sposób:
@JsonView(Views.External.class)
private String external = "External";
@JsonView(Views.Internal.class)
private String internal = "Internal";
Następnie możesz serializować obiekt i określić, którego widoku chcesz użyć:
ObjectMapper jsonMapper = new ObjectMapper();
ObjectWriter externalWriter = jsonMapper.writerWithView(Views.External.class);
String externalJson = externalWriter.writeValueAsString(new ResponseObject());
To działa dobrze dla JSON, ale niestety ten sam nie jest obecnie obsługiwany dla XML. Jak mogę osiągnąć to samo z XML? Jestem gotów użyć JAXB, jeśli jest to konieczne dla mojej konwersji XML.