- spring 카프카에서는 직렬화, 역직렬화 시, 헤더에 클래스에 대한 정보를 담고 이를 활용해서 직렬화/역직렬화를 수행한다.
- 그럼, 헤더를 사용하지 않도록 하면, 간단히 해결되는 문제 아닌가 해서, 아래 설정을 false 로 두어보았다.
spring.json.add.type.headers
spring:
kafka:
consumer:
properties:
spring.json.add.type.headers: false
- 그러나, 다시 아래와 같은 오류가 발생한다.
Caused by: java.lang.IllegalStateException: No type information in headers and no default type provided at org.springframework.util.Assert.state(Assert.java:79) ~[spring-core-6.2.3.jar:6.2.3] at org.springframework.kafka.support.serializer.JsonDeserializer.deserialize(JsonDeserializer.java:598) ~[spring-kafka-3.3.3.jar:3.3.3] at org.springframework.kafka.support.serializer.ErrorHandlingDeserializer.deserialize(ErrorHandlingDeserializer.java:215) ~[spring-kafka-3.3.3.jar:3.3.3] ... 17 common frames omitted
- 조금 더 찾아보니, 헤더를 사용하지 않으려면 default value 를 지정해두고, 해당하는 클래스 형태로만 역직렬화를 수행하게 되는 것 같다.
spring.json.type.mapping
- 아래와 같이 yml 에 추가해서 매핑을 수행할 수 있다.
properties:
spring.json.trusted.packages: me.study.order.*
spring.json.type.mapping: me.study.order.infrastructure.kafka.event.DecreaseStockEvent:me.study.product.infrastructure.kafka.event.DecreaseStockEvent