Я на самом деле играюсь с 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
-Аннотацией. Может кто-нибудь, пожалуйста, объясните, что я делаю не так и неправильно здесь.
спасибо заранее:)