use kotlinx.serialization instead of ObjectMapper in kafka consumer

This commit is contained in:
Denis Savosin
2024-10-03 15:06:16 +07:00
parent f9cf8b84d4
commit 97b673d45e
3 changed files with 4 additions and 12 deletions

View File

@@ -2,7 +2,6 @@ package com.example.demo.config
import com.example.demo.services.database.city.CityService
import com.example.demo.services.kafka.Consumer
import com.fasterxml.jackson.databind.ObjectMapper
import org.apache.kafka.clients.consumer.ConsumerConfig
import org.apache.kafka.common.serialization.StringDeserializer
import org.springframework.beans.factory.annotation.Autowired
@@ -23,10 +22,8 @@ class KafkaConsumerConfig(
@Bean
fun consumer(
@Autowired cityService: CityService,
@Autowired objectMapper: ObjectMapper,
): Consumer = Consumer(
cityService = cityService,
objectMapper = objectMapper,
)
@Bean

View File

@@ -2,7 +2,7 @@ package com.example.demo.services.kafka
import com.example.demo.services.database.city.CityService
import com.example.demo.services.kafka.dto.CityCreateDto
import com.fasterxml.jackson.databind.ObjectMapper
import kotlinx.serialization.json.Json
import org.springframework.kafka.annotation.KafkaListener
import org.springframework.messaging.handler.annotation.Payload
import org.springframework.stereotype.Component
@@ -10,14 +10,13 @@ import org.springframework.stereotype.Component
@Component
class Consumer(
private val cityService: CityService,
private val objectMapper: ObjectMapper
) {
@KafkaListener(
topics = ["#{'\${kafka.consumer.topics}'.split(',')}"],
autoStartup = "\${kafka.consumer.auto-startup:false}",
)
fun handleCityCreate(@Payload message: String) {
val cityCreateDto = objectMapper.readValue(message, CityCreateDto::class.java)
val cityCreateDto = Json.decodeFromString<CityCreateDto>(message)
cityService.create(cityCreateDto)
}
}

View File

@@ -1,16 +1,12 @@
package com.example.demo.services.kafka.dto
import com.fasterxml.jackson.annotation.JsonProperty
import kotlinx.serialization.Serializable
@Serializable
data class CityCreateDto (
@JsonProperty("guid")
val guid: String,
@JsonProperty("name")
val name: String,
@JsonProperty("createdAt")
val createdAt: String,
@JsonProperty("updatedAt")
val updatedAt: String?,
@JsonProperty("deletedAt")
val deletedAt: String?,
)