2013-03-09 3 views
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은 인수가없는 생성자가 없기 때문에

답변

2

아, 그것은, 내가 다음 오류가 표시되지 않습니다 scala.collection.immutable.HashMap로 전환 할 수 있습니다,하지만 map이 값이없는, 완전히 비어 있습니다. HashMapserialVerionUID이고 필드는 더 이상 없습니다.

관련 문제