モデルとして抽象クラスを使うとぬるぽします。
前回の投稿を
少し加工して、MyClassを抽象クラスとして定義します。
gson_class_nullpo.groovy
package jp.eiya.aya.gson
public abstract class MyClass{
private String id=null
private int value=0
public MyClass(String i,int v){
id=i
value=v
}
public String getID(){return id}
public int getValue(){return value}
}
抽象クラスなので、変数testに格納するオブジェクトは、
匿名クラスのオブジェクトとしてインスタンス化します。
gson_test_nullpo.groovy
import com.google.gson.*
import jp.eiya.aya.gson.MyClass
def gson = new Gson()
def test=new MyClass("test" , 1){} // 匿名クラスをインスタンス化
def json=gson.toJson(test) // jsonはnullになる
assert(json == /{"id":"test","value":1}/) // 失敗
MyClass test2 = gson.fromJson(json,MyClass.class) // test2はnullになる
assert(test2.getID() == "test") // ぬるぽ
assert(test2.getValue() == 1) // ぬるぽ
すると、上記のようにjsonやtest2がnullになります。
とくに例外は出ません。
ちょっと気をつけて方がいいみたいですね。
うっかりモデルを抽象クラスとして定義した場合、ぬるぽにやられてしまいます。