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.

questionAnswers(2)

yourAnswerToTheQuestion