Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.ikdaman.domain.member.deserializer;

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;

import java.io.IOException;
import java.time.LocalDate;

public class BirthDateDeserializer extends JsonDeserializer<LocalDate> {
@Override
public LocalDate deserialize(JsonParser p, DeserializationContext ctxt)
throws IOException {
String value = p.getValueAsString();
if (value == null) {
// 실제 null인 경우
return null;
}
if (value.trim().isEmpty()) {
// 빈 문자열인 경우
return LocalDate.MIN;
}
return LocalDate.parse(value);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.ikdaman.domain.member.deserializer;

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.ikdaman.domain.member.entity.Member;

import java.io.IOException;

public class GenderDeserializer extends JsonDeserializer<Member.Gender> {
@Override
public Member.Gender deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
String value = p.getValueAsString();

if (value == null) {
// 실제 null인 경우
return null;
}
if (value.trim().isEmpty()) {
// 빈 문자열인 경우
return Member.Gender.BLANK;
}
return Member.Gender.valueOf(value.toUpperCase());
}
}
2 changes: 1 addition & 1 deletion src/main/java/com/ikdaman/domain/member/entity/Member.java
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ public class Member extends BaseTime {

// 성별 ENUM
public enum Gender {
FEMALE, MALE
FEMALE, MALE, BLANK
}

// 소셜 로그인 제공자 ENUM
Expand Down
6 changes: 5 additions & 1 deletion src/main/java/com/ikdaman/domain/member/model/MemberReq.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
package com.ikdaman.domain.member.model;

import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.ikdaman.domain.member.deserializer.BirthDateDeserializer;
import com.ikdaman.domain.member.deserializer.GenderDeserializer;
import com.ikdaman.domain.member.entity.Member;
import jakarta.validation.constraints.Pattern;
import lombok.AccessLevel;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size;
import org.springframework.format.annotation.DateTimeFormat;

Expand All @@ -24,7 +26,9 @@ public class MemberReq {
@Size(min=2, max=15, message = "닉네임은 최소 2자, 최대 15자만 가능합니다.")
@Pattern(regexp = "^[a-zA-Z0-9가-힣\\s]+$", message = "닉네임은 한글, 영어, 숫자, 공백만을 포함합니다.")
private String nickname;
@JsonDeserialize(using = GenderDeserializer.class)
private Member.Gender gender;
@JsonDeserialize(using = BirthDateDeserializer.class)
@DateTimeFormat(pattern = "yyyy-MM-dd")
private LocalDate birthdate;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.time.LocalDate;
import java.util.Optional;
import java.util.UUID;

Expand Down Expand Up @@ -77,8 +78,12 @@ public MemberRes editMember(UUID memberId, MemberReq memberReq) {
}

member.updateNickname(Optional.ofNullable(memberReq.getNickname()).orElse(member.getNickname()));
member.updateBirthdate(Optional.ofNullable(memberReq.getBirthdate()).orElse(member.getBirthdate()));
member.updateGender(Optional.ofNullable(memberReq.getGender()).orElse(member.getGender()));
// birthdate 필드를 null인 채로 보냈다면 갱신하지 않음, 빈 문자열로 보낸다면 null 처리 (빈 문자열은 Deserializer에서 LocalDate.MIN 처리 됨)
LocalDate birthDate = Optional.ofNullable(memberReq.getBirthdate()).orElse(member.getBirthdate());
member.updateBirthdate((birthDate != LocalDate.MIN) ? birthDate : null);
// gender 필드를 null인 채로 보냈다면 갱신 하지 않음, 빈 문자열로 보낸다면 null 처리
Member.Gender gender = Optional.ofNullable(memberReq.getGender()).orElse(member.getGender());
member.updateGender((gender != Member.Gender.BLANK) ? gender : null);

memberRepository.save(member);

Expand Down