Jackson を使用した Json デシリアライズについて質問があります。次のようなクラスを使用してJsonファイルを逆シリアル化したいと思います:( http://wiki.fasterxml.com/JacksonInFiveMinutesから取得)
public class User
{
public enum Gender { MALE, FEMALE };
public static class Name {
private String _first, _last;
public String getFirst() { return _first; }
public String getLast() { return _last; }
public void setFirst(String s) { _first = s; }
public void setLast(String s) { _last = s; }
}
private Gender _gender;
private Name _name;
private boolean _isVerified;
private byte[] _userImage;
public Name getName() { return _name; }
public boolean isVerified() { return _isVerified; }
public Gender getGender() { return _gender; }
public byte[] getUserImage() { return _userImage; }
public void setName(Name n) { _name = n; }
public void setVerified(boolean b) { _isVerified = b; }
public void setGender(Gender g) { _gender = g; }
public void setUserImage(byte[] b) { _userImage = b; }
}
Json ファイルは、いわゆる「フル データ バインディング」を使用して、次のように逆シリアル化できます。
ObjectMapper mapper = new ObjectMapper();
User user = mapper.readValue(new File("user.json"), User.class);
私の問題は、内部クラス「名前」の使用です。内部クラスを使用せずに同じことをしたいと思います。「ユーザー」クラスは次のようになります。
import Name;
import Gender;
public class User
{
private Gender _gender;
private Name _name;
private boolean _isVerified;
private byte[] _userImage;
public Name getName() { return _name; }
public boolean isVerified() { return _isVerified; }
public Gender getGender() { return _gender; }
public byte[] getUserImage() { return _userImage; }
public void setName(Name n) { _name = n; }
public void setVerified(boolean b) { _isVerified = b; }
public void setGender(Gender g) { _gender = g; }
public void setUserImage(byte[] b) { _userImage = b; }
}
これは、逆シリアル化を実行するために必要なすべてのクラスをマッパーに指定する方法を見つけることを意味します。
これは可能ですか?ドキュメントを見ましたが、解決策が見つかりません。
私が必要としているのは、Javassist ライブラリを使用してそのようなクラスを作成し、内部クラスまたは匿名クラスをサポートしていないという事実から来ています。
前もって感謝します