本当に JSON を URL に入れたいですか?!
ともかく:
public String getToken(MyPlace place) {
JSONObject obj = new JSONObject();
obj.put("id", new JSONString(place.getId());
return obj.toString();
}
public MyPlace getPlace(String token) {
JSONObject obj = JSONParser.parseStrict(token).isObject();
return new MyPlace(obj.get("id").isString().stringValue());
}
AutoBeans を使用して同じことを実現できます。いずれにせよ、あなたの場所に出入りするものをコピーしてください。
別の方法として、もちろん Place を JSONObject/AutoBean でサポートすることもできます。
class MyPlace extends Place {
public static class Tokenizer implements PlaceTokenizer<MyPlace> {
public String getToken(MyPlace place) {
return myPlace.jsonObject.toString();
}
public Place getPlace(String token) {
return new MyPlace(JSONParser.parseStrict(token).isObject());
}
}
private final JSONObject jsonObject;
public MyPlace() {
this(new JSONObject());
}
public MyPlace(JSONObject jsonObject) {
this.jsonObject = jsonObject;
}
public String getId() { return jsonObject.get("id").isString().stringValue(); }
public void setId(String id) { jsonObject.put("id", new JSONString(id)); }
}
注:上記のすべては、AutoBeans でよりうまく機能します。エラー処理は JSONObject を使用した PITA であり、非常に読みやすいコードにもなりません。
場所がたくさんある場合は、ある種のコードジェネレーターがここで役立ちます。