配列、リスト形式のデータをPOSTする際のjava、curl、Ajaxでの操作
この記事はKobe University Advent Calendar 2017の15日目の記事です。なお筆者は当該大学の大学院1回生(2017年現在)です。
背景
授業の関係で、筆者はCloud Spiralというコースを参加させてもらいました。主に最近話題のクラウドサービースについて勉強するのですが、webアプリ開発の知識をいっぱい勉強できました。大学院のほかのどの授業よりも勉強になりました。
最終課題ではチーム開発に入りまして、バックエンド側のとあるAPI部分を担当させてもらいました。その時になかなか解決できない問題及び解決方法について紹介できたらと思います。
問題
API実装に当たって、リストデータの取り扱いがなかなか難しいでした。この記事では、
についてメモろうかと思います。
javaでAPI作成する際にリストを受け取る方法
配列が欲しいので、Listで操作ができます。書き方がこんな感じです:
public Response postRequest(@FormParam("ID") List<Integer> id) { } |
その後は普通のリスト関連の操作と変わらない操作ができます。
後余談ですがパラメータの取り方:Get HTTP header in JAX-RS
curlでリストをPOST
筆者がハマったのがここです。curlについては理解してるとは言えませんので、説明を省きます。ターミナルで
man curl
を打ったらマニュアルが表示します。
- curlについて: curl - How To Use
- 日本語版: http://archive.fo/ZjQfk
ここら辺のマニュアルを読んだんですが、list関連の説明がどれも書いておりません。筆者もかなり悩みました。最後色々適当にコマンドを叩いた結果、一応上のjavaコードに対応するcurlのPOSTコマンドは:
curl http://hogehoge/request -X POST -d id=1 -d id=2
なるほど、リストの要素数だけデータとして渡せばいいのですね。
(追記:このcurlコマンドは、上記のjavaのAPIに対応します。プログラム上、idはList<Integer> になります。)
Ajaxでリストのデータを送信する
開発の段階では自分に全く関係ないのですが、一応チーム開発なので、フロント側がajaxを用いてリストデータを送信する際にどうしてもリストとして認識してくれません。これに関しては先行記事がすでに存在してあります:
jQuery.ajaxで配列を送信するのに嵌った - けさらんぱさらん
一応ここでも書いておきます。
もっとも大事なのは、一番最後の
になります。
(追記: 最後の一行traditional:trueを書かないと、渡されたidの要素は一つのみになってしまう。)
後書き
キーワード:java リスト list 配列 curl ajax
筆者がリスト関連の、特にcurlの部分が丸一日探し回って見つかりませんでした(検索方法が悪かったのかな?)。自分と同じようなことをする人が、キーワードによってこの記事にヒットして何かが得られたら幸いです。
開発においでは自分がとてつもなく情弱です。いいチームに恵まれていい経験が積まれました。本当にありがとうございます。
チームメイト一覧(あだ名、五十音順):
フロントエンド班: イリエッティー、くれない(リーダ)、ザキヤマ
バックエンド班: 村長(リーダ)、パンちゃん
追記(2018/08/24):
もちろん、プログラムを作成する時は設計書通りに書かなくてはいけないと思います。今回は:
とソースコードのおよびテストを設計したため、上記のように問題を処理しました。
そのほか、設計書段階からpostデータを直接jsonデータとして設計した場合、プログラムに渡す方法もあります。
例としてはこちらの記事をご覧ください:
Javaで文字列をJSONObjectに変換する方法 arrays | CODE Q&A [日本語]
ご指摘、ご意見などがあれば、ツイッターにでご連絡いただければ修正します。