Джексон @JsonView в Kotlin бросая MissingKotlinParameterException - PullRequest
0 голосов
/ 01 мая 2020

Я на самом деле играюсь с Kotlin, Джексоном и аннотацией @JsonView. Так что, если кто-то может объяснить следующее поведение и сказать мне, что решение моей проблемы будет высоко оценено. Однако после POJO или POKO и крошечного файла json:)

{
  "Name": "Tester Fred",
  "SecretText": "930479756",
  "Address": "21.,MeineGasse 56-60",
  "Validto": "\/Date(1584748033000)\/"
}
class PlayingWithViews(
        @JsonView(TestViews.NameAndAddress::class)
        val name: String,
        val secretText: String,
        @JsonView(TestViews.NameAndAddress::class)
        val address: String,
        @JsonDeserialize(using = DateToLongSerializer::class)
        val validto: Long)

class TestViews {
    interface NameAndAddress
}

со следующим тестом

    @Test
    fun `test JsonView Annotation`() {
        val jsonContent = readFromResources("plain.json")

        val mapper = jacksonObjectMapper()
                .disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)
                .setPropertyNamingStrategy(PropertyNamingStrategy.UPPER_CAMEL_CASE)
                .disable(MapperFeature.DEFAULT_VIEW_INCLUSION)

        val detailed = mapper.readerWithView(TestViews.NameAndAddress::class.java)
                .forType(PlayingWithViews::class.java)
                .readValue<PlayingWithViews>(jsonContent)

        assertThat(detailed).hasFieldOrPropertyWithValue("address", "21.,MeineGasse 56-60")
        assertThat(detailed).hasFieldOrPropertyWithValue("name", "Tester Fred")
    }

при запуске теста всегда выдается следующее исключение :

com.fasterxml.jackson.module.kotlin.MissingKotlinParameterException: Instantiation of [simple type, class at.xyz.jacksonmapper.model.PlayingWithViews] value failed for JSON property SecretText due to missing (therefore NULL) value for creator parameter secretText which is a non-nullable type
 at [Source: (String)"{
  "Name": "Tester Fred",
  "SecretText": "930479756",
  "Address": "21.,MeineGasse 56-60",
  "Validto": "\/Date(1584748033000)\/"
}
"; line: 6, column: 1] (through reference chain: at.xyz.jacksonmapper.model.PlayingWithViews["SecretText"])

У меня нет проблемы со свойством "SecretText". Джексону даже не следует об этом думать, потому что он не помечен @JsonView -Аннотацией. Может кто-нибудь, пожалуйста, объясните, что я делаю не так и неправильно здесь.

спасибо заранее:)

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