티스토리 뷰

1. 문제점

 

뉴스 요약 서버를 제작하던 중에 만난 에러이다.

database 에 저장되어 있는 news를 다음과 같이 json 형식으로 서빙해주는 과정에서
news id 가 실제 id와 다르게 전달되는 문제가 발생했다.

 

실제 news_id : 11000010011308327

반환 news_id : 11000010011308328

 

 

2. 원인

id가 변하는 시점을 파악하기 위하여 spring server 내부에서 id가 전달되는 과정 마다 log 를 찍어 보았다.

dto controller service repository domain
dto repository service controller 순 으로 데이터가 전달 되는데 서버 내부에서는 변화가 없었다.

dto가 json 으로 변환되는 과정에서 값이 변한다고 예측이 가능했다.

 

출처: https://www.json.org/json-en.html


json 에서 지정하는 value 값의 종류를 확인할 수 있는데 숫자와 관련된 타입은 전부 number 로 처리하는 것을 확인할 수 있다.

 

따라서 java의 대부분의 json parser (entity or dto 객체를 json으로 변환시켜주는 역할을 수행) 는
java의 Integer , double, Long 과 같은 숫자 타입을 전부 double로 먼저 바꾼뒤 double을 json의 number 에 매칭 시킨다. 이때 java 의 double type은 15 - 16자리의 유효숫자를 가지는데, 만약 double 로 변형하려는 long type이 15 - 16 자리 이상의 길이를 가진다면 정확도 측면에서 에러를 마주칠 수 있다.

 

3. 해결

1) dto 의 id type을 Long 에서 String 으로 바꾸면 해결된다.


2) 

spring 은 JsonConverter 로 MappingJackson2HttpMessageConverter 을 이용하는데 이 부분을 수정해서 기존의 long 에서 string으로 타입변화 없이 정확한 json 매핑이 가능할듯 하다.

(더 많은 조사와 공부 이후에 내용 추가하겠습니다.)

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함