ナチュログ管理画面 その他 その他 東海 アウトドア&フィッシングナチュラムアウトドア用品お買い得情報
ブログ作成はコチラ
あなたもナチュログでアウトドア生活を綴ってみませんか?
プロフィール
MJ
組込み系のエンジニアをやっていましたが、時代の流れとともにWeb系にシフトし、最近では、その技術を生かしIT技術講師をやっています。
私が目指す講義のあり方は、技術者として当然スキルは身につけていただきますが、人としても育っていただきたいと考えています。

アクセスカウンタ
読者登録
メールアドレスを入力して登録する事で、このブログの新着エントリーをメールでお届けいたします。解除は→こちら
現在の読者数 1人
QRコード
QRCODE
Information
アウトドア用品の
ご購入なら!

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
2014/10/30 Jackson Jsonからクラスへマッピングとその逆
 これでプロジェクトに外部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
 2014/10/30 Jackson Jsonからクラスへマッピングとその逆



今回はこんな感じです。Jax-RSに関してはまたの機会に。。。

●倒れるだけで腹筋ワンダーコアでおなじみの商品です。
ショップジャパン 【正規品】ワンダーコア(WONDER CORE)DVD付
ショップジャパン 【正規品】ワンダーコア(WONDER CORE)DVD付




最新記事画像
2014/10/22 LibGDX アプリ作成2 画面遷移、タイトル文字表示、ボタン、イベント処理追加
2014/10/07 LibGDX 開発環境のインストール3 使い方 bmfont
2014/10/07 LibGDX 開発環境のインストール2 使い方 9patch,texturepacker
2014/10/01 LibGDX 1.3.1 LibGDXTestsを動かす?
2014/09/24 LibGDX 開発環境のインストール
2014/07/23 CakePHP2 -6- Time型で時刻だけ表示したい どこをいじればいいの。。。
最新記事
 2014/10/22 LibGDX アプリ作成2 画面遷移、タイトル文字表示、ボタン、イベント処理追加 (2014-10-22 10:48)
 2014/10/21 LibGDX アプリ作成1 スプラッシュの表示 (2014-10-21 10:46)
 2014/10/07 LibGDX 開発環境のインストール3 使い方 bmfont (2014-10-08 16:13)
 2014/10/07 LibGDX 開発環境のインストール2 使い方 9patch,texturepacker (2014-10-07 15:37)
 20141002 LibGDX 1.3.1 不完全辞書 (2014-10-03 11:59)
 2014/10/01 LibGDX 1.3.1 LibGDXTestsを動かす? (2014-10-01 10:23)

※このブログではブログの持ち主が承認した後、コメントが反映される設定です。
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。

削除
2014/10/30 Jackson Jsonからクラスへマッピングとその逆
    コメント(0)