質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

3850閲覧

JavaサーバーにAjaxリクエストのレスポンスが配列の際、サーバー側のエラーはどう渡すとよいのでしょうか

rontec

総合スコア169

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

1グッド

0クリップ

投稿2016/02/11 05:52

仮に以下のような構成で、ajaxリクエストに対して条件にヒットしたユーザー一覧を返すシステムを組んだとします。
※ブラウザに直接打ち込んでいるため、シンタックスに問題があった時ははお見逃しください。

javascript

1var gender = 1 // manに相当; 2var birth = "1990"; 3$.ajax({ 4 type: "POST", 5 url: "/getUerFromGender", 6 data: {"gender" : gender, "birth" : birth} 7}).done(function(res) { 8 ~ resを画面に反映 ~ 9});

java

1// getUerFromGender で稼働する処理 2pullic Array<User> getUerFromGender(){ 3 Array<User> userList = new Array<User>; 4 ~性別、誕生年でuserを検索~ 5 return userList; // ヒットしたユーザー一覧を返す 6}

上記のような処理で正常系は問題ないのですが、何かエラーがあったときのレスポンスをどう書くべきか迷っています。
具体的には、ヒット件数が多いからさらに絞込をして欲しい時、想定外の値がPOSTされたときなどです。
原因次第でフロントに表示するエラーメッセージは違うものとします。

現状はUserクラスにエラーフィールドを持たせ、エラーがあった場合はuserListにUserを1つだけ格納し、エラーフィールドにエラーコードを入れることで対処しています。
問題がなかったときは、Userクラスのエラーフィールドは勿論空です。
レスポンス件数が1件だけだった場合、エラーの可能性があるのでエラーフィールドを見に行きます。

上記の方法ですが、正直あまり良い方法だとは思ってはいません。
他にそもそも直接Array<User>で返すのではなく、Array<User>を収録したクラスを別に用意し、そこにエラーフィールドを持たせる方法も思いつきましたが、毎回配列をajaxで返すときそんな面倒なことしなければいけないものかと悩んでいます。

何か良い方法をご存知の方がいらしたら、ご教示ください。

ikuwow👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

私が通常行っているクラス設計では、Array<User>を含んだ、いわゆるビューに返すクラスを別途用意し、さらにそのスーパークラスとしてエラー情報を持つクラスを用意します。

ビュー側では、エラー情報にエラーが含まれていればエラーを、含まれていなければ表示データを表示する様にしています。

エラー情報には、エラーコード、エラーメッセージなどを含めています。エラーコードが0だったら成功と見なすなど、やり方はそれぞれです。

投稿2016/02/11 08:18

shanxia

総合スコア1038

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rontec

2016/02/11 08:26

やはりArray<User>をそのまま帰すのではなく、Array<User>を内包したクラスを返すやり方が一般的なのでしょうか。 今作っているシステムもviewクラスの数がかなり多く、管理が大変で極力作らない方向にしていたのですが、パッケージを工夫するなりで増えることを容認していくしかなさそうですね。 アドバイスありがとうございます。
shanxia

2016/02/11 08:36

そうですね。MVCモデルを採用すると、やたらとクラスの数が増えていってしまいますので管理が大変になりますね。 普段私もパッケージ名やクラス名をうまく工夫して、わかりやすくしています。
rontec

2016/02/20 06:41

今回は結局arrayをそのまま使用したclassと、エラーフィールドを内包したスーパークラスが混在してしまい、少し残念な形になっちゃいました…。 次回から参考にさせて頂きます。
guest

0

ベストアンサー

そのように欲しい情報の側に様々なルールや値を入れるよりは、
欲しい情報とは別に処理ステータスやエラーメッセージを持たせた方が良いかと思います

例えばjson形式で返すようにし、初めにエラーコードなどを付加するのはいかがでしょうか?
(json形式でなくても何でも良いですが)

なんとなくのイメージですが、
{
errorCode:0
errorMessage:null
userList:[
...
]
}

errorCodeが正常の場合
errorMessageは空っぽ
userListの方は値が入る
errorCodeが異常の場合
errorMessageにメッセージが入り、
userListの方は空っぽとかnullとかが入る

投稿2016/02/12 08:54

編集2016/02/15 11:51
EKD

総合スコア161

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rontec

2016/02/12 13:05

アドバイスありがとうございます。 nodeなどで記述していたときはそうしていたのですが、Javaだと戻しの型は「Map<String, Object>」とかになるのでしょうか。 その場合、コントローラーのリクエストを受け付ける系メソッドの型がいずれも同じようになり、パッと何を返すメソッドなのか分からなくなることを恐れているのですが、そうでもないのでしょうか。
EKD

2016/02/15 12:04 編集

>Javaだと戻しの型は「Map<String, Object>」とかになるのでしょうか。 → 申し訳ありません。私にJavaの知識が足りず、具体的な型が解りません… >コントローラーのリクエストを受け付ける系メソッドの型がいずれも同じようになり、パッと何を返すメソッドなのか分からなくなることを恐れているのですが → 人それぞれかもしれませんが、私の場合ですと、ある程度、共通のパラメータを持たせたいと考えることが多いです 例えばメソッドその1では { result:OK listA: [ "hoge", "hoge" ] } メソッドその2では、 { result:OK num: 2 listB: [ 1, 2 ], listC: [ "aaa", "bbb" ] } みたいなレスポンスでも良いのでは無いかと思います 質問者さまの質問の意図とは異なるかもしれませんが、REST-APIのレスポンスなど参考になるかもしれません http://qiita.com/suin/items/f7ac4de914e9f3f35884 https://docs.mobage.com/display/JPSA/Error+Handling+for+API+access http://d.hatena.ne.jp/cou929_la/20130121/1358776754
rontec

2016/02/20 06:42

ご丁寧にありがとうございます。 今回は既に作ってしまったクラス構造との兼ね合いもあり、少し残念なRESTになりつつあります。。 次回移行のために、頂いたアドバイスやURLは拝見させて頂きます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問