GetとPost Webserviceをブラウザでテストし、Postは405エラーを報告し続けたが、Getが成功した原因と解決方法は...
1844 ワード
スレ主はJerseyでRestful Webserviceを開発したとき、このような問題に遭遇しました.
同じ方法で実現し、@get定義と@post定義で、@getはテストに合格できますが、@postはできません.
getとpostはただの仕様だと思っていましたが、いいでしょう..ある程度、そうです.
しかし、ブラウザを使用してテストすると、そうではありません.
ブラウザのアドレスバーからアドレスを入力と、アクセスするURLはgetリクエストであるため、post定義方法では、リクエストと実装が一致しないため、405エラー、method not allowed、The specified HTTP method is not allowed for the requested resourceが戻る.
これは結局ブラウザがgetリクエストを送信したためであり,メソッドはpostリクエストしか処理できないため発生したエラーである.
あまりにもlowなのか、ネットで検索しても答えが見つからず、stackoverflowで答えを見つけました
http://stackoverflow.com/questions/25253972/put-jersey-error-405-method-not-allowed
ブラウザでpostのテストをしたいなら、次のchromeのpostmanプラグインで、あなたの問題を完璧に解決します.
最後に360 DocからGetとPostリクエストの違いを見つけ、ここに貼り付けました
1.ブラウザがgetリクエストを送信する場合
a.ブラウザのアドレスバーに直接アドレスを入力する
b.リンクをクリック
c.フォームのデフォルトの提出方法
2.どの場合、ブラウザがpostリクエストを送信しますか?
a.フォームmethod=「post」の設定
3.getリクエストの特徴
a.要求パラメータは要求リソースの回路力の後に追加され、少量のパラメータしか追加できない(要求行が1行しかないため、約2 K程度のデータしか保存できない)(2 K程度のデータも、少なくないように見える...)
b.要求パラメータはブラウザアドレスバーに表示され、ルータは要求アドレスを記録する
4.postリクエストの特徴
a.要求パラメータを実体コンテンツに追加し、大量のパラメータを追加することができる(ブラウザのアドレスバーがpost要求を送信できない理由も説明しているが、アドレスバーにはURLしか記入できず、Httpパッケージの実体に入ることができない)
b.比較的安全であるが、post要求は要求パラメータを暗号化処理しない(httpsプロトコルを使用してデータの安全を保証することができる).
転載先:https://www.cnblogs.com/Raymond-Yang/p/5412611.html
同じ方法で実現し、@get定義と@post定義で、@getはテストに合格できますが、@postはできません.
@GET //@POST
@Path("/getUser")
@Produces("application/json") //@Consumes(application/x-www-form-urlencoded)
public String getUserById(@QueryParam("loginID") String loginID) throws Exception {
String users = null;
CVCUserDAO dao = new CVCUserDAO();
ArrayList datas = dao.getUsers(loginID);
Gson gson = new Gson();
users = gson.toJson(datas);
return users;
// return "Hello World";
}
getとpostはただの仕様だと思っていましたが、いいでしょう..ある程度、そうです.
しかし、ブラウザを使用してテストすると、そうではありません.
ブラウザのアドレスバーからアドレスを入力と、アクセスするURLはgetリクエストであるため、post定義方法では、リクエストと実装が一致しないため、405エラー、method not allowed、The specified HTTP method is not allowed for the requested resourceが戻る.
これは結局ブラウザがgetリクエストを送信したためであり,メソッドはpostリクエストしか処理できないため発生したエラーである.
あまりにもlowなのか、ネットで検索しても答えが見つからず、stackoverflowで答えを見つけました
http://stackoverflow.com/questions/25253972/put-jersey-error-405-method-not-allowed
ブラウザでpostのテストをしたいなら、次のchromeのpostmanプラグインで、あなたの問題を完璧に解決します.
最後に360 DocからGetとPostリクエストの違いを見つけ、ここに貼り付けました
1.ブラウザがgetリクエストを送信する場合
a.ブラウザのアドレスバーに直接アドレスを入力する
b.リンクをクリック
c.フォームのデフォルトの提出方法
2.どの場合、ブラウザがpostリクエストを送信しますか?
a.フォームmethod=「post」の設定
3.getリクエストの特徴
a.要求パラメータは要求リソースの回路力の後に追加され、少量のパラメータしか追加できない(要求行が1行しかないため、約2 K程度のデータしか保存できない)(2 K程度のデータも、少なくないように見える...)
b.要求パラメータはブラウザアドレスバーに表示され、ルータは要求アドレスを記録する
4.postリクエストの特徴
a.要求パラメータを実体コンテンツに追加し、大量のパラメータを追加することができる(ブラウザのアドレスバーがpost要求を送信できない理由も説明しているが、アドレスバーにはURLしか記入できず、Httpパッケージの実体に入ることができない)
b.比較的安全であるが、post要求は要求パラメータを暗号化処理しない(httpsプロトコルを使用してデータの安全を保証することができる).
転載先:https://www.cnblogs.com/Raymond-Yang/p/5412611.html