この記事では、主に@RequestBodyの正しい使用に関する関連コンテンツを次のように研究しています。
最近、私は去ろうとしている同僚と仕事を引き継いでいました。私が引き継いだプロジェクトは、Springbootで構築されました。私はこの執筆方法を見ました:
@RequestMapping( "dothis")public string dothis(httpservletrequest request、 @requestparam( "id")long id、// user id @requestparam( "back_url")string back_url、//コールバックアドレス@requestbody testentity json_data
これはリクエストマッピングメソッドであり、ブラウザでURLを入力してください:http://127.0.0.1:8080/test/dothis?id=1&back_url=url&json_data=
この方法では、@RequestParamを使用してパラメーターを取得し、@RequestBodyを使用してJSON形式のパラメーターをJavaタイプに変換します
実行中、エラーが見つかりました:必要なリクエストボディが欠落しています
@RequestBodyでは、MappingJackson2HTTPMESSAGECONVERTERを使用する必要がありますが、SpringBootの公式ドキュメントは、これはすでにデフォルトで読み込まれていると述べており、JSON文字列とJavabeansを書くことにエラーはありません。
したがって、ブラウザを使用してURLを入力することでコンテンツタイプを定義する方法がないため、コンテンツタイプを要求する問題であるべきであると考えると、Springはリクエストボディを見つけることができません
このアイデアを確認するには、リクエストクラスを自分で書きます。
string add_url = "http://127.0.0.1:8080/test/dothis"; url url = new url(add_url); httpurlconnection connection =(httpurlconnection)url.openconnection(); connection.setDoinput(true); connection.setDoOutput(true); connection.setRequestMethod( "post"); connection.setuseCaches(false); connection.setantanceFollowRedirects(true); connection.setRequestProperty( "content-type"、 "application/json"); connection.connect(); dataoutputStream out = new DataOutputStream(connection.getOutputStream()); jsonobject obj = new jsonobject(); obj.put( "code"、-1002); obj.put( "message"、 "msg"); out.writebytes(obj.tostring()); out.flush(); out.close();
リクエストはまだ失敗しました。デバッグ後、成功するにはすべての@RequestParamアノテーションを削除する必要があることがわかりました。
要約します
1。@RequestBodyは、すべての要求パラメーターをJSONとして解析する必要があります。したがって、キー=値をリクエストURLに含めることはできません。すべての要求パラメーターはJSONです
2。ブラウザを介して直接URLを入力すると、@RequestBodyはJSONオブジェクトを取得できません。 JavaプログラミングまたはAJAXベースのメソッドリクエストを使用し、コンテンツタイプをApplication/JSONに設定する必要があります
上記は、@RequestBodyの正しい使用法を解釈することに関するものであり、すべての人に役立つことを願っています。興味のある友人は、このサイトの他の関連トピックを引き続き参照できます。欠点がある場合は、それを指摘するためにメッセージを残してください。このサイトへのご支援をありがとうございました!