Как условно сериализовать с JAXB или Джексоном? Внешний вид против внутреннего вид

Я создаю RESTful API, и у меня есть сценарий использования, когда мне нужно иметь возможность отображать два разных представления моих данных. Тот, который мы можем использовать внутри, и тот, который мы выставим снаружи. Кроме того, мой API должен поддерживать как XML, так и JSON.

Для моего ответа JSON это очень легко сделать с Джексоном. Я могу условно включить поля в свой JSON Response, используя функцию JsonViews:http://wiki.fasterxml.com/JacksonJsonViews

Сначала вам нужно создать простой класс, определяющий ваши представления:

public class Views {

    public static class External {}

    public static class Internal extends External {}
}

Теперь с моими классами представления я просто аннотирую свои поля, которым они принадлежат, примерно так:

    @JsonView(Views.External.class)
    private String external = "External";

    @JsonView(Views.Internal.class)
    private String internal = "Internal";

Затем вы можете сериализовать объект и указать, какое представление вы хотите использовать:

    ObjectMapper jsonMapper = new ObjectMapper();
    ObjectWriter externalWriter = jsonMapper.writerWithView(Views.External.class);
    String externalJson = externalWriter.writeValueAsString(new ResponseObject());

Это хорошо работает для JSON, но, к сожалению, то же самое в настоящее время не поддерживается для XML. Как я могу добиться того же с XML? Я готов использовать JAXB при необходимости для моего преобразования XML.

Ответы на вопрос(2)

Ваш ответ на вопрос