
회사에서 테스트하던 도중 데이터를 확인했는데 정수형(`Integer`)이어야 할 데이터가 실수형(`Double`)으로 들어가 있었다.
분명 클라이언트에서 넘어오는 파라미터도 정수형이었는데 뭐가 문제일까?
String json = "{\"params\":{\"num\":9999}}";
Host host = gson.fromJson(json, Host.class);
코드를 추적해보니 json 문자열 파라미터를 전달받은 후 `gson`을 이용해 객체로 변환할 때 객체의 필드가 실수로 변환되고 있었다.

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

해결
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` 타입으로 변환될 수 있을 때 해당 타입으로 변환
변환 우선순위
- `Long`
- `Double`
참고
'Trouble Shooting' 카테고리의 다른 글
| Docker IP 대역 변경 (0) | 2025.12.03 |
|---|