일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 공부기록
- 협업도구
- IT
- jwt
- c
- 시스템프로그래밍
- Django
- 코딩테스트
- kafka
- 기술블로그
- 코테
- SpringSecurity
- 백준
- java
- kafkaconsumer
- 알고리즘
- github
- 회고록
- 자료구조
- codingtest
- AWS
- git
- 선택정렬
- 문자열함수
- 문자열압축
- 자바
- 트러블슈팅
- testcode
- 기록
- 한이음
- Today
- Total
신뇽이 되어보자
OpenAPI불러올 때 마주친 에러 - OpenAPI Call Failure java.lang.IllegalStateException 본문
OpenAPI불러올 때 마주친 에러 - OpenAPI Call Failure java.lang.IllegalStateException
신뇽이되고싶은미뇽 2023. 12. 9. 19:25문제 부분
OpenAPI Call Failure java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 181 path $.SearchPublicToiletPOIService.row[0].CNAME
URL도 출력이 잘 되는데 response만 null이 뜬다..
URL 출력이 잘된다는 의미는 api호출에 문제가 없다는 것인데 왜... 안뜨는걸까 하고 로그를 다시 제대로 봐봤는데
아래와 같은 로그를 발견했다.
위의 로그를 해석해보니 OpenAPI의 CNAME이 String문자열인데 내가 정의한 타입은 그게 아니라고 해석되었다.
Map타입으로 정의되어있던 CNAME을 String타입으로 바꿔줬다.
처음에는 OpenApi json형태를 kotlin형태로 변환할때 변수이름들을 잘못 정의 했나 싶어서 다시 해보았는데
계속 안되었다.
디버깅 로그를 계속 찍어도 항상 null값이 나와서 답답했는데
package:mine 필터에서 로그를 보니 정의된 값 타입이 이상해서 그런것이다 라는 것을 알았고
고쳐줬더니 바로 해결되었다.
무언가가 안될 때 나는 항상 빨간색으로 표시된 것들만 읽었는데,
파란색으로도 표시가 되는구나…를 알았고,, 로그를 좀더 면밀히 살펴볼 필요성을 배웠다.
https://transform.tools/json-to-kotlin
JSON to Kotlin
to TypeScript Declaration to TypeScript Declaration
transform.tools
이 아이를 사용해서 json을 Kotlin으로 변환시켜줬는데
거의 정확하지만 타입같은 것은 나의 프로젝트와 잘 맞춰서 수정해야겠다.
어쨌든 해결
위의 사이트에서 Map<String, Any>로 타입을 지정해준 이유가
공공데이터가 XML형태로 되어 있어서
JSON으로 변환해준 다음 Kotlin으로 변환시켜줬었다.
JSON으로 변환하는 과정에 있어서 XML의 CNAME을 객체로 판단했던 것 같다.
하지만 하지만 parsing할때 CNAME은 String인데 정의가 Map타입으로 되어있어서 타입불일치로 API가 잘 불러와지지 않았고 로그를 찍어봤을 때 계속 response가 null로 표시되었던 것이다.