Джексон Сериализировать массив JSON как свойство String - PullRequest
0 голосов
/ 19 июня 2019

Я пытаюсь получить полезные данные из удаленного веб-сервиса, используя Джексона, где возвращаемый JSON содержит свойства, которые иногда определяются как массивы, а в другие - обычные строки.

Я пытался аннотировать поле с помощью JsonRawValue, но все еще получаю сообщение об ошибке:

com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of java.lang.String out of START_ARRAY token

Следующие классы Kotlin используются для сериализации указанной полезной нагрузки JSON:

data class Device(
    @get:JsonProperty("common.uuid")
    val commonUuid: String? = null,

    @field:JsonRawValue
    @get:JsonProperty("user.ldap.groups.dn")
    val userLdapGroupsDn: String? = null
)

data class DeviceSearchResults(
    @JsonProperty("resultCount")
    val resultCount: Int = 0,

    @JsonProperty("totalCount")
    val totalCount: Int = 0,

    @JsonProperty("results")
    val results: List<Device> = listOf()
)

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

окурки-получить devices.json

{
  "results": [
    {
      "common.uuid": "848ba0e8-d313-4df5-9a9e-3d9ea28951fa",
      "user.ldap.groups.dn": [
        "cn=qss-role-megamall-internet,ou=foo,ou=groups,dc=bar"
      ]
    }
  ]
}
@Test
fun testJsonSerialization() {
    val objectMapper = ObjectMapper().apply {
        setSerializationInclusion(JsonInclude.Include.NON_EMPTY)
        configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
        registerModule(KotlinModule())
    }
    val file = File("stubs/get-devices.json")
    val value = objectMapper.readValue(file, DeviceSearchResults::class.java)
    assertThat(value).isNotNull
    println(value)
}

Есть ли способ привести значение массива JSON в свойство String в сериализованном объекте?

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