Gson으로 파싱할 때 double 자동변환

2025. 12. 2. 22:37·Trouble Shooting

실수형 데이터

회사에서 테스트하던 도중 데이터를 확인했는데 정수형(`Integer`)이어야 할 데이터가 실수형(`Double`)으로 들어가 있었다.

 

분명 클라이언트에서 넘어오는 파라미터도 정수형이었는데 뭐가 문제일까?

 

String json = "{\"params\":{\"num\":9999}}";
Host host = gson.fromJson(json, Host.class);

코드를 추적해보니 json 문자열 파라미터를 전달받은 후 `gson`을 이용해 객체로 변환할 때 객체의 필드가 실수로 변환되고 있었다.

 

실행결과

 

 

원인

`Gson`의 Object to Number 정책의 기본값이 `Double`이므로 따로 설정을 세팅해주지 않으면 `Double`로 변환되는 것이었다.

Gson의 기본 정책

 

 

해결

Gson을 커스텀해서 따로 util 클래스로 만들어 사용하고 있었는데 `gson` 인스턴스를 빌드할 때 Object to Number 변환정책을  `LONG_OR_DOUBLE`로 세팅함

public static Gson makeGson() {
    GsonBuilder builder = new GsonBuilder();
    ...
    builder.setObjectToNumberStrategy(ToNumberPolicy.LONG_OR_DOUBLE);

    return builder.create();
}

`LONG_OR_DOUBLE` : 숫자로 변환될 객체가 `Long` 또는 `Double` 타입으로 변환될 수 있을 때 해당 타입으로 변환

 

변환 우선순위

  1. `Long`
  2. `Double`

 

참고

https://velog.io/@kimnow/LocalDate-Gson-jackson

https://jcchu.medium.com/gson변환-시-int가-double로-773e5e81c105

'Trouble Shooting' 카테고리의 다른 글

Docker IP 대역 변경  (0) 2025.12.03
'Trouble Shooting' 카테고리의 다른 글
  • Docker IP 대역 변경
말차쟁이
말차쟁이
  • 말차쟁이
    Hello world
    말차쟁이
  • 전체
    오늘
    어제
    • 분류 전체보기 (12)
      • SOSO (0)
      • Java (4)
      • Spring (0)
      • Computer Science (1)
      • Object-oriented programming (2)
      • DataBase (0)
      • Git (0)
      • Algorithm (2)
      • Degisn Pattern (0)
      • Network (0)
      • Trouble Shooting (2)
      • 기타 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    알고리즘
    백준
    자바
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
말차쟁이
Gson으로 파싱할 때 double 자동변환
상단으로

티스토리툴바