Как условно сериализовать с 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.