From 98a1901f3a103d22b1639601beb5dcc216199aa0 Mon Sep 17 00:00:00 2001 From: Kurt92 Date: Thu, 11 Dec 2025 17:23:51 +0900 Subject: [PATCH] =?UTF-8?q?feat=20:=20Map=20->=20DTO=20=EC=BB=A8=EB=B2=84?= =?UTF-8?q?=ED=84=B0=201.=20=EA=B8=B0=EB=B3=B8=EB=AA=A8=EB=93=9C=20(?= =?UTF-8?q?=EB=8A=90=EC=8A=A8=ED=95=A8,=20=ED=95=84=EB=93=9C=20=EC=97=86?= =?UTF-8?q?=EC=9C=BC=EB=A9=B4=20=EA=B7=B8=EB=83=A5=20null)=202.=20?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=EB=A6=AD=ED=8A=B8=EB=AA=A8=EB=93=9C=20(?= =?UTF-8?q?=EC=97=84=EA=B2=A9=ED=95=A8,=20=ED=95=84=EB=93=9C=20=EC=95=88?= =?UTF-8?q?=EB=A7=9E=EC=9C=BC=EB=A9=B4=20=EC=9D=B5=EC=85=89=EC=85=98)=203.?= =?UTF-8?q?=20=EA=B0=80=EB=8F=85=20(=EC=84=B8=EB=B2=88=EC=A7=B8=20?= =?UTF-8?q?=ED=8C=8C=EB=9D=BC=EB=AF=B8=ED=84=B0=EA=B0=80=20=EB=AD=94?= =?UTF-8?q?=EC=A7=80=20=EB=93=A4=EC=96=B4=EA=B0=80=EC=A0=84=EC=97=90=20?= =?UTF-8?q?=EC=95=8C=EC=88=98=20=EC=97=86=EC=96=B4=EC=84=9C=20=ED=97=AC?= =?UTF-8?q?=ED=8D=BC=20=EB=A7=A4=EC=84=9C=EB=93=9C=20=EC=B6=94=EA=B0=80)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../exception/DtoConvertException.java | 7 +++ .../java/egovframework/util/DtoConverter.java | 53 +++++++++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 src/main/java/egovframework/exception/DtoConvertException.java create mode 100644 src/main/java/egovframework/util/DtoConverter.java diff --git a/src/main/java/egovframework/exception/DtoConvertException.java b/src/main/java/egovframework/exception/DtoConvertException.java new file mode 100644 index 0000000..9d7a682 --- /dev/null +++ b/src/main/java/egovframework/exception/DtoConvertException.java @@ -0,0 +1,7 @@ +package egovframework.exception; + +public class DtoConvertException extends RuntimeException { + public DtoConvertException(String message, Throwable cause) { + super(message, cause); + } +} diff --git a/src/main/java/egovframework/util/DtoConverter.java b/src/main/java/egovframework/util/DtoConverter.java new file mode 100644 index 0000000..56fbb88 --- /dev/null +++ b/src/main/java/egovframework/util/DtoConverter.java @@ -0,0 +1,53 @@ +package egovframework.util; + +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectReader; +import egovframework.exception.DtoConvertException; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +import java.io.IOException; +import java.util.Map; + +@Component +@RequiredArgsConstructor +public class DtoConverter { + + private final ObjectMapper objectMapper; + + /** + * Map → DTO 변환 + * unknown 필드 허용 + */ + public T toDto(Map body, Class clazz) { + return toDto(body, clazz, false); + } + + + + + /** + * strict모드 가독 헬퍼 + * */ + public T toStrictDto(Map body, Class clazz) { + return toDto(body, clazz, true); + } + + /** + * Map → DTO 변환 + * @param strict true > unknown 필드에 대한 예외 발생 + */ + public T toDto(Map body, Class clazz, boolean strict) { + try { + ObjectReader reader = objectMapper.readerFor(clazz); + if (strict) { + reader = reader.with(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); + } + return reader.readValue(objectMapper.writeValueAsBytes(body)); + } catch (IOException e) { + throw new DtoConvertException("DTO 변환 실패: " + clazz.getSimpleName(), e); + } + } + +}