LoginSignup
2
2

More than 5 years have passed since last update.

GSONでは抽象クラスを使うときには注意が必要

Posted at

モデルとして抽象クラスを使うとぬるぽします。
前回の投稿
少し加工して、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になります。
とくに例外は出ません。

ちょっと気をつけて方がいいみたいですね。
うっかりモデルを抽象クラスとして定義した場合、ぬるぽにやられてしまいます。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2