숫자형 validation 로직 원복 100.12 -> 5,2 로 설정하는 방식
This commit is contained in:
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user