feat : Car 와 Owner 의 직렬화에 사용되는 Serializer 추가
This commit is contained in:
@@ -10,6 +10,8 @@ import com.fasterxml.jackson.databind.ser.std.StdSerializer
|
||||
*
|
||||
* Custom Serializer 를 만들기 위해서는 아래와 같이 StdSerializer<T> 를 상속해야 한다.
|
||||
*
|
||||
* 만약 어노테이션을 이용한 설정 또는 프로퍼티마다 다르게 작동하는 Serializer 를 만들고 싶다면 JsonSerializer 의 add-on interface 인 ContextualSerializer 를 구현하면 된다.
|
||||
*
|
||||
* @see com.fasterxml.jackson.databind.ser.std.StdSerializer
|
||||
* @see com.fasterxml.jackson.databind.ser.ContextualSerializer
|
||||
*/
|
||||
@@ -37,3 +39,22 @@ class CarPriceSerializer : StdSerializer<Car>(Car::class.java) {
|
||||
gen.writeEndObject()
|
||||
}
|
||||
}
|
||||
|
||||
class CarNameOwnerSerializer : StdSerializer<Car>(Car::class.java) {
|
||||
override fun serialize(value: Car, gen: JsonGenerator, provider: SerializerProvider) {
|
||||
gen.writeStartObject()
|
||||
gen.writeStringField("name", value.name)
|
||||
gen.writeObjectField("owner", value.owner)
|
||||
gen.writeEndObject()
|
||||
}
|
||||
}
|
||||
|
||||
class CarNameOwnerNameSerializer : StdSerializer<Car>(Car::class.java) {
|
||||
override fun serialize(value: Car, gen: JsonGenerator, provider: SerializerProvider) {
|
||||
gen.writeStartObject()
|
||||
gen.writeStringField("name", value.name)
|
||||
gen.writeObjectFieldStart("owner")
|
||||
gen.writeStringField("name", value.owner.name)
|
||||
gen.writeEndObject()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package com.banjjoknim.playground.jsonserialize
|
||||
|
||||
import com.banjjoknim.playground.jackson.jsonserialize.CarNameOwnerNameSerializer
|
||||
import com.banjjoknim.playground.jackson.jsonserialize.CarNameOwnerSerializer
|
||||
import com.banjjoknim.playground.jackson.jsonserialize.CarNameSerializer
|
||||
import com.banjjoknim.playground.jackson.jsonserialize.CarPriceSerializer
|
||||
import com.banjjoknim.playground.jackson.jsonserialize.CarSerializer
|
||||
@@ -92,5 +94,33 @@ class CarSerializerTest {
|
||||
// then
|
||||
assertThat(result).isEqualTo("""{"price":10000000}""")
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `자동차의 이름과 오너의 모든 필드를 직렬화한다`() {
|
||||
// given
|
||||
val module = SimpleModule()
|
||||
module.addSerializer(Car::class.java, CarNameOwnerSerializer())
|
||||
mapper.registerModule(module)
|
||||
|
||||
// when
|
||||
val result = mapper.writeValueAsString(car)
|
||||
|
||||
// then
|
||||
assertThat(result).isEqualTo("""{"name":"banjjoknim","owner":{"name":"ban","age":30}}""")
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `자동차의 이름과 오너의 이름만 직렬화한다`() {
|
||||
// given
|
||||
val module = SimpleModule()
|
||||
module.addSerializer(Car::class.java, CarNameOwnerNameSerializer())
|
||||
mapper.registerModule(module)
|
||||
|
||||
// when
|
||||
val result = mapper.writeValueAsString(car)
|
||||
|
||||
// then
|
||||
assertThat(result).isEqualTo("""{"name":"banjjoknim","owner":{"name":"ban"}}""")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user