숫자형 validation 로직 원복 100.12 -> 5,2 로 설정하는 방식
This commit is contained in:
@@ -222,11 +222,11 @@ public class Converter {
|
|||||||
}
|
}
|
||||||
String[] data = normalized.split("[.]");
|
String[] data = normalized.split("[.]");
|
||||||
if (pointLength > 0) {
|
if (pointLength > 0) {
|
||||||
// length 는 소수점(.) 문자를 제외한 전체 자릿수 규약. 정수부 허용 자릿수 = length - pointLength
|
// length 는 소수점(.) 문자를 포함한 전체 길이 규약. 정수부 허용 자릿수 = length - pointLength - 1
|
||||||
if (data.length == 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) {
|
} 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;
|
if (data[1].length() > pointLength) return false;
|
||||||
} else {
|
} else {
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -26,8 +26,8 @@ import com.eactive.eai.transformer.message.MessageSetDataException;
|
|||||||
* 테스트 대상 레이아웃: EAI_UJSONTYPE_REQ1
|
* 테스트 대상 레이아웃: EAI_UJSONTYPE_REQ1
|
||||||
* - INT_VALUE : INT, length=5, decimal=0
|
* - INT_VALUE : INT, length=5, decimal=0
|
||||||
* - LONG_VALUE : LONG, length=10, decimal=0
|
* - LONG_VALUE : LONG, length=10, decimal=0
|
||||||
* - BIG_VALUE : BIGDECIMAL, length=10, decimal=5 → 정수부 최대 5자리
|
* - BIG_VALUE : BIGDECIMAL, length=10, decimal=5 → 정수부 최대 4자리
|
||||||
* (length 는 소수점(.) 문자를 제외한 전체 자릿수 규약)
|
* (length 는 소수점(.) 문자를 포함한 전체 길이 규약)
|
||||||
* - BIG15_VALUE : BIGDECIMAL, length=15, decimal=0 → 정수부 최대 15자리
|
* - BIG15_VALUE : BIGDECIMAL, length=15, decimal=0 → 정수부 최대 15자리
|
||||||
* - STR_VALUE : STRING, length=20
|
* - STR_VALUE : STRING, length=20
|
||||||
*
|
*
|
||||||
@@ -196,12 +196,12 @@ class JSONMessageValidationTest {
|
|||||||
// ─────────────────────────────────────────────────────────────────
|
// ─────────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@DisplayName("BIG_VALUE 정수부 초과(6자리 > 5자리 제한) → MessageSetDataException")
|
@DisplayName("BIG_VALUE 정수부 초과(5자리 > 4자리 제한) → MessageSetDataException")
|
||||||
void testBigDecimalIntegerPartOverflow() {
|
void testBigDecimalIntegerPartOverflow() {
|
||||||
enableValidation();
|
enableValidation();
|
||||||
|
|
||||||
// 정수부 6자리(123456) → 제한(5자리) 초과
|
// 정수부 5자리(12345) → 제한(4자리) 초과
|
||||||
String data = "{\"EAI_UJSONTYPE_REQ1\":{\"BIG_VALUE\":123456.12345}}";
|
String data = "{\"EAI_UJSONTYPE_REQ1\":{\"BIG_VALUE\":12345.12345}}";
|
||||||
Message msg = MessageFactory.getFactory().getMessage("EAI_UJSONTYPE_REQ1");
|
Message msg = MessageFactory.getFactory().getMessage("EAI_UJSONTYPE_REQ1");
|
||||||
|
|
||||||
MessageSetDataException ex = assertThrows(
|
MessageSetDataException ex = assertThrows(
|
||||||
@@ -261,33 +261,17 @@ class JSONMessageValidationTest {
|
|||||||
assertTrue(result.contains("BIG_VALUE"), "BIG_VALUE가 결과에 포함되어야 합니다");
|
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 필요
|
// 2-c. BigDecimal 자릿수 초과 (JSON 문자열 형태) — transformer.validation=true 필요
|
||||||
// ─────────────────────────────────────────────────────────────────
|
// ─────────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@DisplayName("BIG_VALUE 정수부 초과 문자열 입력(6자리 > 5자리 제한) → MessageSetDataException")
|
@DisplayName("BIG_VALUE 정수부 초과 문자열 입력(5자리 > 4자리 제한) → MessageSetDataException")
|
||||||
void testBigDecimalIntegerPartOverflowFromString() {
|
void testBigDecimalIntegerPartOverflowFromString() {
|
||||||
enableValidation();
|
enableValidation();
|
||||||
|
|
||||||
// JSON 문자열 "123456.12345" → 정수부 6자리 초과
|
// JSON 문자열 "12345.12345" → 정수부 5자리 초과
|
||||||
String data = "{\"EAI_UJSONTYPE_REQ1\":{\"BIG_VALUE\":\"123456.12345\"}}";
|
String data = "{\"EAI_UJSONTYPE_REQ1\":{\"BIG_VALUE\":\"12345.12345\"}}";
|
||||||
Message msg = MessageFactory.getFactory().getMessage("EAI_UJSONTYPE_REQ1");
|
Message msg = MessageFactory.getFactory().getMessage("EAI_UJSONTYPE_REQ1");
|
||||||
|
|
||||||
MessageSetDataException ex = assertThrows(
|
MessageSetDataException ex = assertThrows(
|
||||||
|
|||||||
Reference in New Issue
Block a user