숫자형 validation 로직 원복 100.12 -> 5,2 로 설정하는 방식

This commit is contained in:
curry772
2026-08-05 16:33:25 +09:00
parent 375f0e0f15
commit 051305ac55
2 changed files with 11 additions and 27 deletions
@@ -222,11 +222,11 @@ public class Converter {
}
String[] data = normalized.split("[.]");
if (pointLength > 0) {
// length 는 소수점(.) 문자를 제외한 전체 자릿수 규약. 정수부 허용 자릿수 = length - pointLength
// length 는 소수점(.) 문자를 포함한 전체 길이 규약. 정수부 허용 자릿수 = length - pointLength - 1
if (data.length == 1) {
if (data[0].length() > length - pointLength) return false;
if (data[0].length() > length - pointLength - 1) return false;
} else if (data.length == 2) {
if (data[0].length() > length - pointLength) return false;
if (data[0].length() > length - pointLength - 1) return false;
if (data[1].length() > pointLength) return false;
} else {
return false;
@@ -26,8 +26,8 @@ import com.eactive.eai.transformer.message.MessageSetDataException;
* 테스트 대상 레이아웃: EAI_UJSONTYPE_REQ1
* - INT_VALUE : INT, length=5, decimal=0
* - LONG_VALUE : LONG, length=10, decimal=0
* - BIG_VALUE : BIGDECIMAL, length=10, decimal=5 → 정수부 최대 5자리
* (length 는 소수점(.) 문자를 제외한 전체 자릿수 규약)
* - BIG_VALUE : BIGDECIMAL, length=10, decimal=5 → 정수부 최대 4자리
* (length 는 소수점(.) 문자를 포함한 전체 길이 규약)
* - BIG15_VALUE : BIGDECIMAL, length=15, decimal=0 → 정수부 최대 15자리
* - STR_VALUE : STRING, length=20
*
@@ -196,12 +196,12 @@ class JSONMessageValidationTest {
// ─────────────────────────────────────────────────────────────────
@Test
@DisplayName("BIG_VALUE 정수부 초과(6자리 > 5자리 제한) → MessageSetDataException")
@DisplayName("BIG_VALUE 정수부 초과(5자리 > 4자리 제한) → MessageSetDataException")
void testBigDecimalIntegerPartOverflow() {
enableValidation();
// 정수부 6자리(123456) → 제한(5자리) 초과
String data = "{\"EAI_UJSONTYPE_REQ1\":{\"BIG_VALUE\":123456.12345}}";
// 정수부 5자리(12345) → 제한(4자리) 초과
String data = "{\"EAI_UJSONTYPE_REQ1\":{\"BIG_VALUE\":12345.12345}}";
Message msg = MessageFactory.getFactory().getMessage("EAI_UJSONTYPE_REQ1");
MessageSetDataException ex = assertThrows(
@@ -261,33 +261,17 @@ class JSONMessageValidationTest {
assertTrue(result.contains("BIG_VALUE"), "BIG_VALUE가 결과에 포함되어야 합니다");
}
@Test
@DisplayName("BIG_VALUE 정수부 경계값(정수부 5자리 + 소수부 5자리) → 정상 처리")
void testBigDecimalIntegerPartBoundary() throws Exception {
enableValidation();
// length=10, decimal=5 이고 length 에 소수점(.)은 포함되지 않으므로
// 정수부 5자리(10-5)까지 허용된다.
String data = "{\"EAI_UJSONTYPE_REQ1\":{\"BIG_VALUE\":12345.12345}}";
Message msg = MessageFactory.getFactory().getMessage("EAI_UJSONTYPE_REQ1");
msg.setData(data);
String result = (String) msg.getData();
assertNotNull(result, "결과값이 null이 아니어야 합니다");
assertTrue(result.contains("BIG_VALUE"), "BIG_VALUE가 결과에 포함되어야 합니다");
}
// ─────────────────────────────────────────────────────────────────
// 2-c. BigDecimal 자릿수 초과 (JSON 문자열 형태) — transformer.validation=true 필요
// ─────────────────────────────────────────────────────────────────
@Test
@DisplayName("BIG_VALUE 정수부 초과 문자열 입력(6자리 > 5자리 제한) → MessageSetDataException")
@DisplayName("BIG_VALUE 정수부 초과 문자열 입력(5자리 > 4자리 제한) → MessageSetDataException")
void testBigDecimalIntegerPartOverflowFromString() {
enableValidation();
// JSON 문자열 "123456.12345" → 정수부 6자리 초과
String data = "{\"EAI_UJSONTYPE_REQ1\":{\"BIG_VALUE\":\"123456.12345\"}}";
// JSON 문자열 "12345.12345" → 정수부 5자리 초과
String data = "{\"EAI_UJSONTYPE_REQ1\":{\"BIG_VALUE\":\"12345.12345\"}}";
Message msg = MessageFactory.getFactory().getMessage("EAI_UJSONTYPE_REQ1");
MessageSetDataException ex = assertThrows(