dd7c8a29bf7b4db13398821555e96c12b6369d80
JacksonUtil.newNumberSafeMapper() 는 USE_BIG_DECIMAL_FOR_FLOATS + withExactBigDecimals 로 입력(파싱)측만 막고 있었다. DecimalNode 직렬화는 BigDecimal.toString() 이라 scale 이 음수이거나 adjusted exponent < -6 일 때 지수 표기가 나온다. 즉 파싱을 제대로 해도 내보낼 때 작은 소수가 깨졌다. 0.00000012 -> 1.2E-7 , -0.0000005 -> -5E-7 WRITE_BIGDECIMAL_AS_PLAIN 을 추가해 출력측까지 보존한다. (금액처럼 scale >= 0 인 큰 값은 원래 영향 없음. 이율/환율이 대상) 또한 JacksonUtil.setValue() 가 ArrayNode.set(int, String) 을 쓰고 있었다. 이 오버로드는 jackson-databind 2.13 부터이고, 실제 런타임은 2.12.7 이다 (2.12.7 은 set(int, JsonNode) 하나뿐). jackson-dataformat-xml:2.13.1 이 compileOnly 로 컴파일 클래스패스에만 2.13.1 을 올려 컴파일만 통과하던 상태였고, 배열 경로에 setText() 하면 운영에서 NoSuchMethodError 가 났다. TextNode.valueOf() 로 감싸 set(int, JsonNode) 에 바인딩한다. 그 외 - TemplateCodeConvertAdapterErrorMsgHandler: 응답 JSON 왕복 지점 전환 - HttpAdapterServiceSupport, HttpClient5AdapterServiceRestAddFilter: 직렬화 지점 전환 - JsonReader: parse() 호출마다 ObjectMapper 를 새로 만들던 것을 static 싱글턴으로 바꾸고 중복 설정 코드를 JacksonUtil 에 위임 - MessageKeyExtractor: 선언만 하고 쓰지 않는 ObjectMapper 필드 제거 - build.gradle: 미사용 jackson-dataformat-xml 제거 (common 은 Ignite 경유로 jackson 확보) 검증: gradlew compileJava BUILD SUCCESSFUL, databind 2.12.7 런타임에서 숫자 왕복 4건 + setText 배열/객체/미존재 경로 5건 전부 통과.
Description
No description provided
Languages
Java
100%