Как переименовать корневой ключ JSON с помощью Java Jackson? - PullRequest
1 голос
/ 07 ноября 2011

Я использую Jackson 1.9.1 из Scala для маршалинга объектов в JSON.Мой код сортировки выглядит так:

val mapper = new ObjectMapper()

mapper.configure(SerializationConfig.Feature.WRAP_ROOT_VALUE, true)
mapper.setPropertyNamingStrategy(new PropertyNamingStrategy.LowerCaseWithUnderscoresStrategy())

val introspectorPair = new AnnotationIntrospector.Pair(
  new JacksonAnnotationIntrospector(),
  new JaxbAnnotationIntrospector()
)
mapper.getSerializationConfig().withAnnotationIntrospector(introspectorPair)

val writer = mapper.defaultPrettyPrintingWriter
writer.writeValueAsString(this)

Типичный JSON, который он производит, выглядит так:

{
  "SalesOrder" : {
    "id" : "3187e7d0-f84f-11e0-be50-0800200c9a66",
    "total_paid" : 8.99,
    "created_at" : "2011-05-14T00:00:00.000+0300",
    "updated_at" : "2011-05-14T00:00:00.000+0300"
  }
}

Мой вопрос: как мне переименовать корневой ключ из «SalesOrder»к более дружественному JavaScript "sales_order"?Добавление переопределения JsonProperty выше моего определения класса не работает - возможно, потому что корневой ключ не является строго свойством (следовательно, setPropertyNamingStrategy() также не применяется)?

Любое руководство о том, как достичьэто с благодарностью получено!

1 Ответ

4 голосов
/ 07 ноября 2011

Вы можете использовать аннотацию JAXB @XmlRootElement (при использовании JaxbAnnotationIntrospector, который вы здесь), или собственную @JsonRootNameorg.codehaus.jackson.map.annotate1) Джексона.

Или, если вы хотите это сделатьбез аннотаций может также подкласс одного из AnnotationIntrospector и переопределить метод findRootName(...) - это то, что определяет имя для использования, как правило, из аннотаций, но вы можете реализовать любую пользовательскую логику, которую вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...