Cloudera CDH/CDP 및 Hadoop EcoSystem, Semantic IoT등의 개발/운영 기술을 정리합니다. gooper@gooper.com로 문의 주세요.
MongoDB의 json데이타를 GSON을 이용하여 parsing할때 아래와 같은 오류가 발생할 수 있는데 이는 ObjectId값이 String이 아닌 Object(클래스 형태)로 인식이 되어 발생하는 문제이다.
그래서 GSON 파싱할때 사용되는 클래스를 생성할때 {"_time":1480579094,"_machine":-1422354433,"_inc":-987106123,"_new":false}를 담을 수 있는 class를 생성하고 이 클래스를 멤버 변수로 가지고 있는 클래스를 만들어서 지정해주면 해결된다.
--------------오류 메세지--------------------
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected a string but was BEGIN_OBJECT at line 1 column 9
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:176)
at com.google.gson.Gson.fromJson(Gson.java:803)
at com.google.gson.Gson.fromJson(Gson.java:768)
at com.google.gson.Gson.fromJson(Gson.java:717)
at com.google.gson.Gson.fromJson(Gson.java:689)
at com.gooper.icbms.sda.sf.TripleService.getTriple(TripleService.java:64)
at com.gooper.icbms.sda.kafka.onem2m.AvroOneM2MDataSubscribe$ConsumerT.run(AvroOneM2MDataSubscribe.java:135)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.IllegalStateException: Expected a string but was BEGIN_OBJECT at line 1 column 9
at com.google.gson.stream.JsonReader.nextString(JsonReader.java:821)
at com.google.gson.internal.bind.TypeAdapters$13.read(TypeAdapters.java:358)
at com.google.gson.internal.bind.TypeAdapters$13.read(TypeAdapters.java:346)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:93)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:172)
... 9 more