Итак, у меня был код, получающий JSON через REST-API и с помощью jaxb преобразующий его в java-объекты. И был другой код, который те же объекты засылал в другое REST-API уже с использованием Gson (пожалуйста не спрашивай, почему в одном проекте используются две разные технологии для решения одной и той же задачи :) ).
Проблемы начались когда поля_в_json сталиНазываться чутьБолее сложно-и-разнообразно. JAXB расставляет для полей и классов аннотации @XmlType
и @XmlElement
чтобы матчить такие названия при преобразованиях. Gson же использует для матчинга свою аннотацию @SerializedName
. Получается что нужно добавить эту аннотацию в генерируемые бины.
Я был уверен, что существует готовое решение этой задачи, но потратил прилично времени прежде чем нашел его. Мой спаситель - jaxb2-basics-annotate плагин. Первое, что нужно сделать - добавить его в зависимости твоего wadl-client-plugin
:
а в конфигурацию добавить ключик:
Теперь надо расширить описание нужного поля в xsd-схеме:
Аналогичным образом можно аннотировать не только поля, но и методы классов (например, обозвать их @Deprecated
:) ) и сами классы.
Проблема автоматически сгенерированного кода в том, что он автоматически сгенерирован. Он имеет жесткую структуру, ограниченную правилами генерации. С одной стороны, можно расширять механизмы генерации, повышая гибкость, с другой стороны, есть риск получить еще один язык программирования (а смысл тогда?). Истина как всегда где-то между.
comments powered by Disqus