2014年10月30日
2014/10/30 Jackson Jsonからクラスへマッピングとその逆
いままで、LibGDXを使ってゴチョゴチョしてましが、そのなかでserverに対して問い合わせをすることになりました。
今回は以下の内容について考えていきたいと思います。
1.概要
2.準備
3.JsonエンティティクラスからJsonへ
4.JsonからJsonエンティティクラスへ
5.ソースの参照
1.概要
構成としては、クライアントをLibGDXで作成し、サーバ側はJax-RSで構成します。
Jax-RSって何?はい、WikiPediaからマルパクですが、、、、↓な感じです。
JAX-RS (Java API for RESTful Web Services) は、RESTアーキテクチャに基づくWebサービスのための機能を提供するJava言語のAPIである。 JAX-RSはJava SE 5で導入されたアノテーションの仕組みを用いて、シンプルな開発を実現する。
やり取りは、Jsonを利用しますので、Jsonと対になったJsonエンティティクラスを用意します。
(エンティティと言ってしまうと、実態とかになってしまうので、ここではJsonエンティティクラスとします。)
そのJsonからJsonエンティティクラスにマッピングするのに使用するのが、Jacksonとなります。
今回は、Jackson(1.9.13)を利用します。
2.準備
・「ここ」からJacksonのjarをダウンロードしましょう。
僕は、個別にダウンロードしました。(jackson-core-asl、jackson-jaxrs、jackson-mapper-asl、jackson-xc)が、allでいい気がします。
ダウンロードしたjarは下記のフォルダを作成して、ごろごろと入れておきます。
C:\pleiades\workspace\プロジェクト名\core\libs\jackson-1.9.13\
・プロジェクトに追加
次に、coreプロジェクトを選択し、右クリックで、「プロパティ」をクリック、「Javaビルドパス」を選択し、「ライブラリ」タブをクリック、
「外部jar追加」ボタンをクリック、上記フォルダよりjarを追加します。
なになにわかりにくい?www

これでプロジェクトに外部jarとして追加されました。
3.JsonエンティティクラスからJsonへ
ボタンのクリックイベントに書いておく感じですね!
4.JsonからJsonエンティティクラスへ
3.同様に簡単にマッピングできてしまいましたねw
5.ソースの参照
気になるのは、JsonParseException 、JsonMappingException、IOExceptionですが、どんなときに発生するかですよね?
そんなのは、こんな解決方法がありますよ。
追えないソースはこんな感じでダウンロードします。
さらに、下記フォルダにsourceフォルダを追加し、そこに下記ファイルをぶちこみます。
C:\pleiades\workspace\プロジェクト名\core\libs\jackson-1.9.13\
「jackson-core-asl-1.9.13-sources.jar」
「jackson-jaxrs-1.9.13-sources.jar」
「jackson-mapper-asl-1.9.13-sources.jar」
「jackson-xc-1.9.13-sources.jar」
次に、「パッケージエクスプローラ」ビュー内の「参照ライブラリ」-「jackson-core-asl-1.9.13-sources.jar」を右クリックして、「プロパティ」をクリックすると下記の画面が起動します。
①をクリックし、②で先ほどダウンロードしたソースを選択、③でOK!です。これであなたもソースが見放題ですねw

今回はこんな感じです。Jax-RSに関してはまたの機会に。。。
今回は以下の内容について考えていきたいと思います。
1.概要
2.準備
3.JsonエンティティクラスからJsonへ
4.JsonからJsonエンティティクラスへ
5.ソースの参照
1.概要
構成としては、クライアントをLibGDXで作成し、サーバ側はJax-RSで構成します。
Jax-RSって何?はい、WikiPediaからマルパクですが、、、、↓な感じです。
JAX-RS (Java API for RESTful Web Services) は、RESTアーキテクチャに基づくWebサービスのための機能を提供するJava言語のAPIである。 JAX-RSはJava SE 5で導入されたアノテーションの仕組みを用いて、シンプルな開発を実現する。
やり取りは、Jsonを利用しますので、Jsonと対になったJsonエンティティクラスを用意します。
(エンティティと言ってしまうと、実態とかになってしまうので、ここではJsonエンティティクラスとします。)
そのJsonからJsonエンティティクラスにマッピングするのに使用するのが、Jacksonとなります。
今回は、Jackson(1.9.13)を利用します。
2.準備
・「ここ」からJacksonのjarをダウンロードしましょう。
僕は、個別にダウンロードしました。(jackson-core-asl、jackson-jaxrs、jackson-mapper-asl、jackson-xc)が、allでいい気がします。
ダウンロードしたjarは下記のフォルダを作成して、ごろごろと入れておきます。
C:\pleiades\workspace\プロジェクト名\core\libs\jackson-1.9.13\
・プロジェクトに追加
次に、coreプロジェクトを選択し、右クリックで、「プロパティ」をクリック、「Javaビルドパス」を選択し、「ライブラリ」タブをクリック、
「外部jar追加」ボタンをクリック、上記フォルダよりjarを追加します。
なになにわかりにくい?www

これでプロジェクトに外部jarとして追加されました。
3.JsonエンティティクラスからJsonへ
ボタンのクリックイベントに書いておく感じですね!
~前略~
ExHttpRequest exHttpRequestPost = new ExHttpRequest(HttpMethods.POST);
String json = "";
//このUserクラスがJsonエンティティクラスです。
User user = new User();
//フィールドにはloginName、loginCredがあり、それらのsetter/getterがあります。
user.setLoginName(textFieldUserid.getText());
user.setLoginCred(textFieldPassword.getText());
//オブジェクトマッパーのwriteValueAsStringメソッドでオリャ!とすると、jsonに変換できますよぉー!
ObjectMapper mapper = new ObjectMapper();
try {
json = mapper.writeValueAsString(user);
} catch (JsonGenerationException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
Gdx.app.log(AAAGame.TITLE, e.getMessage());
} catch (JsonMappingException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
Gdx.app.log(AAAGame.TITLE, e.getMessage());
} catch (IOException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}
//ここから先でGdxのhttpアクセサを使ってリクエストをぶん投げます。
exHttpRequestPost.setContent(json);
exHttpRequestPost.setHeader("Content-Type", "application/json");
//ここで、Webサーバに対してのURIを記載します。”http://www・・・・”みたいな感じですね。
exHttpRequestPost.setUrl(exHttpRequestPost.URL_SERVER + exHttpRequestPost.URL_USERS);
4.JsonからJsonエンティティクラスへ
3.同様に簡単にマッピングできてしまいましたねw
//3.の続きで、レスポンスのコールバックを指定していきます。
Gdx.net.sendHttpRequest(exHttpRequestPost, new HttpResponseListener() {
//受け取るjson文字列
String status = "";
public void handleHttpResponse(HttpResponse httpResponse) {
status = httpResponse.getResultAsString();
Gdx.app.log(AAAGame.TITLE, status);
//オブジェクトマッパーのreadValueを利用してjasonからLoginResponseEntityに値をマッピングします。
ObjectMapper mapper = new ObjectMapper();
try {
LoginResponseEntity re = mapper.readValue(status, LoginResponseEntity.class);
if(re.resultFlag){
Gdx.app.log(AAAGame.TITLE, "ログインOK");
}else{
Gdx.app.log(AAAGame.TITLE, ErrorMessage.E00001);
exLabelErrorInfo.setText("OUT!!!");
}
} catch (JsonParseException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
} catch (JsonMappingException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
} catch (IOException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}
}
public void failed(Throwable t) {
status = "failed";
//エラーメッセージを表示
exLabelErrorInfo.setText(ErrorMessage.E90001);
Gdx.app.log(AAAGame.TITLE, status);
}
@Override
public void cancelled() {
// TODO 自動生成されたメソッド・スタブ
}
});
5.ソースの参照
気になるのは、JsonParseException 、JsonMappingException、IOExceptionですが、どんなときに発生するかですよね?
そんなのは、こんな解決方法がありますよ。
追えないソースはこんな感じでダウンロードします。
さらに、下記フォルダにsourceフォルダを追加し、そこに下記ファイルをぶちこみます。
C:\pleiades\workspace\プロジェクト名\core\libs\jackson-1.9.13\
「jackson-core-asl-1.9.13-sources.jar」
「jackson-jaxrs-1.9.13-sources.jar」
「jackson-mapper-asl-1.9.13-sources.jar」
「jackson-xc-1.9.13-sources.jar」
次に、「パッケージエクスプローラ」ビュー内の「参照ライブラリ」-「jackson-core-asl-1.9.13-sources.jar」を右クリックして、「プロパティ」をクリックすると下記の画面が起動します。
①をクリックし、②で先ほどダウンロードしたソースを選択、③でOK!です。これであなたもソースが見放題ですねw

今回はこんな感じです。Jax-RSに関してはまたの機会に。。。
Posted by MJ at 13:03│Comments(0)
※このブログではブログの持ち主が承認した後、コメントが反映される設定です。