Como fazer @JsonUnwrapped
a anotação Jackson funcionar corretamente na classe de dados Kotlin para desserialização?
Além da criação de um desserializador personalizado para esta classe e adicioná-lo ao mapeador de objetos como um módulo, não encontrei nenhuma solução simples.
Aqui está meu exemplo de código:
@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY)
@JsonNaming(PropertyNamingStrategies.LowerCamelCaseStrategy::class)
@Schema(description = "Customer Details", allOf = [Address::class, Person::class])
data class CustomerDetails(
@JsonUnwrapped val addressDetails: Address?,// address related fields
@JsonUnwrapped val personDetails: Person? // person related fields
)
@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY)
@JsonNaming(PropertyNamingStrategies.LowerCamelCaseStrategy::class)
data class Address(
val houseNumber: Int?,
val streetName: String?,
val city: String?
)
@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY)
@JsonNaming(PropertyNamingStrategies.LowerCamelCaseStrategy::class)
data class Person(
val firstName: String?,
val lastName: String?,
val initials: String?
)
Por causa da anotação @Schema, a página swagger funciona bem. Por causa da anotação @JsonUnwrapped, a serialização do objeto para JSON funciona como pretendido. Mas a desserialização falha com o erro: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Não é possível definir a propriedade do criador "nome da propriedade" como @JsonUnwrapped
: combinação ainda não suportada