Skip to content

Commit 0d0439d

Browse files
authored
Merge pull request #12 from Modern-Programming-Club/feature/3.2.1.-add-unit-test
Add custom Jackson serializers/deserializers for Member VO
2 parents 122dd37 + c90e624 commit 0d0439d

File tree

6 files changed

+95
-5
lines changed

6 files changed

+95
-5
lines changed

spring-boot/src/main/java/com/mpc/springboot/member/application/dto/CreateMemberRequest.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,18 @@
33
import com.mpc.springboot.member.domain.entity.Member;
44
import com.mpc.springboot.member.domain.vo.MemberCode;
55
import com.mpc.springboot.member.domain.vo.MemberName;
6-
import lombok.Getter;
7-
import lombok.RequiredArgsConstructor;
6+
import lombok.*;
87

98
@Getter
10-
@RequiredArgsConstructor
9+
@NoArgsConstructor
1110
public class CreateMemberRequest {
12-
private final MemberCode code;
13-
private final MemberName name;
11+
private MemberCode code;
12+
private MemberName name;
13+
14+
public CreateMemberRequest(MemberCode code, MemberName name) {
15+
this.code = code;
16+
this.name = name;
17+
}
1418

1519
public Member toEntity() {
1620
return Member.of(code, name);
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.mpc.springboot.member.infrastructure.serialization.jackson;
2+
3+
import com.fasterxml.jackson.databind.module.SimpleModule;
4+
import com.mpc.springboot.member.domain.vo.MemberCode;
5+
import com.mpc.springboot.member.domain.vo.MemberName;
6+
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
7+
import org.springframework.context.annotation.Bean;
8+
import org.springframework.context.annotation.Configuration;
9+
10+
@Configuration
11+
public class JacksonConfig {
12+
13+
@Bean
14+
public Jackson2ObjectMapperBuilderCustomizer customJackson() {
15+
return builder -> {
16+
SimpleModule module = new SimpleModule();
17+
module.addSerializer(MemberCode.class, new MemberCodeSerializer());
18+
builder.modules(module);
19+
};
20+
}
21+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.mpc.springboot.member.infrastructure.serialization.jackson;
2+
3+
import java.io.IOException;
4+
5+
import com.fasterxml.jackson.core.JsonParser;
6+
import com.fasterxml.jackson.databind.*;
7+
import com.mpc.springboot.member.domain.vo.MemberCode;
8+
9+
public class MemberCodeDeserializer extends JsonDeserializer<MemberCode> {
10+
@Override
11+
public MemberCode deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
12+
return MemberCode.of(p.getText());
13+
}
14+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.mpc.springboot.member.infrastructure.serialization.jackson;
2+
3+
import java.io.IOException;
4+
5+
import com.fasterxml.jackson.core.JsonGenerator;
6+
import com.fasterxml.jackson.databind.JsonSerializer;
7+
import com.fasterxml.jackson.databind.SerializerProvider;
8+
import com.mpc.springboot.member.domain.vo.MemberCode;
9+
10+
public class MemberCodeSerializer extends JsonSerializer<MemberCode> {
11+
@Override
12+
public void serialize(MemberCode value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
13+
gen.writeString(value.getValue());
14+
}
15+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.mpc.springboot.member.infrastructure.serialization.jackson;
2+
3+
import com.fasterxml.jackson.core.JsonParser;
4+
import com.fasterxml.jackson.core.JsonProcessingException;
5+
import com.fasterxml.jackson.databind.DeserializationContext;
6+
import com.fasterxml.jackson.databind.JsonDeserializer;
7+
import com.fasterxml.jackson.databind.JsonNode;
8+
import com.mpc.springboot.member.domain.vo.MemberName;
9+
10+
import java.io.IOException;
11+
12+
public class MemberNameDeserializer extends JsonDeserializer<MemberName> {
13+
@Override
14+
public MemberName deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
15+
JsonNode node = p.getCodec().readTree(p);
16+
17+
// JSON의 루트에서 firstName, lastName 가져오기
18+
String firstName = node.has("firstName") ? node.get("firstName").asText() : "";
19+
String lastName = node.has("lastName") ? node.get("lastName").asText() : "";
20+
21+
return MemberName.of(firstName, lastName);
22+
}
23+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.mpc.springboot.member.presentation.converter;
2+
3+
import org.springframework.core.convert.converter.Converter;
4+
import org.springframework.stereotype.Component;
5+
import com.mpc.springboot.member.domain.vo.MemberCode;
6+
7+
@Component
8+
public class MemberCodeConverter implements Converter<String, MemberCode> {
9+
@Override
10+
public MemberCode convert(String source) {
11+
return MemberCode.of(source);
12+
}
13+
}

0 commit comments

Comments
 (0)