Tengo una clase de datos de Kotlin que se serializa en JSON en un proyecto de Spring Boot. Me gustaría personalizar cómo se formatea la fecha al serializar a JSON. El nombre del campo debe serializarse utilizando reglas predeterminadas. Eso expresa lo que me gustaría hacer:
class ZonedDateTimeSerialiser : JsonSerializer<ZonedDateTime>() { @Throws(IOException::class) fun serialize(value: ZonedDateTime, gen: JsonGenerator, serializers: SerializerProvider?) { val parseDate: String? = value.withZoneSameInstant(ZoneId.of("Europe/Warsaw")) .withZoneSameLocal(ZoneOffset.UTC) .format(DateTimeFormatter.ISO_DATE_TIME) gen.writeString(parseDate) } } data class OrderNotesRequest( @JsonSerialize(using = ZonedDateTimeSerialiser::class) val date: ZonedDateTime = ZonedDateTime.now() )Pero me sale un error de tipo:
Type mismatch. Required: KClass<out (JsonSerializer<Any!>..JsonSerializer<*>?)> Found: KClass<ZonedDateTimeSerialiser> Intenté cambiar el parámetro a anotación a contentUsing pero el error de tipo siguió siendo el mismo.
Lo siguiente me funciona
object JacksonRun { @JvmStatic fun main(args: Array<String>) { val objMapper = ObjectMapper().apply { registerModule(KotlinModule()) } val order = OrderNotesRequest() println(objMapper.writeValueAsString(order)) } } data class OrderNotesRequest( @JsonSerialize(using = ZonedDateTimeSerialiser::class) val date: ZonedDateTime = ZonedDateTime.now() ) class ZonedDateTimeSerialiser : JsonSerializer<ZonedDateTime>() { @Throws(IOException::class) override fun serialize(value: ZonedDateTime, gen: JsonGenerator, serializers: SerializerProvider?) { val parseDate: String = value.withZoneSameInstant(ZoneId.of("Europe/Warsaw")) .withZoneSameLocal(ZoneOffset.UTC) .format(DateTimeFormatter.ISO_DATE_TIME) gen.writeString(parseDate) } }construir.gradle.kts:
dependencies { implementation("com.fasterxml.jackson.core:jackson-core:2.13.2") implementation("com.fasterxml.jackson.core:jackson-annotations:2.13.2") implementation("com.fasterxml.jackson.core:jackson-databind:2.13.2") implementation("com.fasterxml.jackson.module:jackson-module-kotlin:2.13.0") }me da salida:
{"date":"2022-03-21T10:29:19.381498Z"} Asegúrese de tener la importación correcta para JsonSerializer
import com.fasterxml.jackson.databind.JsonSerializer y agregue el marcador de override para serialize el método