2
다음은 JSON String을 Map of String -> String
으로 역 직렬화하려는 샘플 Scala 객체입니다. 나는 GSON 2.2.2와 Scala 2.10을 사용한다.스칼라가있는 GSON - scala.collection.immutable.Map에 대한 인수없는 생성자를 호출 할 수 없습니다.
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
object MyTest {
def main(args: Array[String]) {
val gson = new Gson
val jsonString = "{\"test1\": \"value-test1\",\"test2\":\"value-test2\"}"
val mapType = new TypeToken[Map[String, String]] {}.getType
val map = gson.fromJson(jsonString, mapType).asInstanceOf[Map[String, String]]
}
}
그리고는 스택 추적 val map = ...
의 라인에 발생합니다 :
Exception in thread "main" java.lang.RuntimeException: Unable to invoke no-args
constructor for
scala.collection.immutable.Map<java.lang.String, java.lang.String>.
Register an InstanceCreator with Gson for this type may fix this problem.
at com.google.gson.internal.ConstructorConstructor$8.construct(ConstructorConstructor.java:167)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:162)
at com.google.gson.Gson.fromJson(Gson.java:795)
at com.google.gson.Gson.fromJson(Gson.java:761)
at com.google.gson.Gson.fromJson(Gson.java:710)
at MyTest$.main(MyTest.scala:9)
at MyTest.main(MyTest.scala)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.google.gson.internal.UnsafeAllocator$1.newInstance(UnsafeAllocator.java:48)
at com.google.gson.internal.ConstructorConstructor$8.construct(ConstructorConstructor.java:164)
... 6 more
Caused by: java.lang.InstantiationException: scala.collection.immutable.Map
at sun.misc.Unsafe.allocateInstance(Native Method)
... 12 more
그래서 잘못 여기 무슨 일이야? Map
은 인수가없는 생성자가 없기 때문에