ホームページ  >  記事  >  Java  >  Spring MVCでパラメータの値が正常に取得できない問題の解決方法(コード付き)

Spring MVCでパラメータの値が正常に取得できない問題の解決方法(コード付き)

不言
不言転載
2019-04-13 09:56:074523ブラウズ

この記事の内容はSpring MVCでパラメータ値が正常に取得できない問題の解決方法(コード付き)です一定の参考値が記載されておりますので困っている方は参考にしていただければ幸いですあなた。 。

最近、開発中に非常に奇妙な問題に遭遇しました。tomcat8 で Spring MVC フレームワークを使用すると、コントローラーのメソッド パラメーターが対応する値を正常に取得できませんでした。Tomcat のバージョンを次のように変更することで解決しました。 7.0。

次のソリューション プロセスを記録します。最初に上の図を示します。

##プロジェクトは ssm を採用しています。アーキテクチャ、パラメータのパスワードの値はここでは取得できません。インターネットで関連情報を検索し、次の解決策を見つけましたが、どれも効果がありませんでした:

1. @RequestParam アノテーション

を使用します。

は、パスワード パラメータです。RequestParam アノテーションを追加した後も、デバッグではパスワードの値を取得できません。required の値を true に変更すると、エラーが直接報告されます。エラーは、パスワード パラメータが欠落していることを意味しますが、パラメータが明らかに渡されているのに、パラメータが見つからないと言われるのはなぜですか? 渡したパラメータが認識されなかった可能性がありますか?この時、パラメータの受け渡し方法に問題がある可能性が考えられます。パラメーターの受け渡し方法を変更し、パスワードの値を URL の末尾に追加し、GET リクエストと同じようにパラメーターを渡します。案の定、このためパラメータの値を受け取ることができます。ただし、このパラメータの受け渡し方法を使用すると、RequestParam アノテーションを付加せずにパラメータの値を受け取ることができます。このメソッドは受け取ったパラメータの値を受け取ることはできますが、POSTのパラメータを渡すメソッドに耐えられないので、次のメソッドを探します

2。 @ RequestBody アノテーション

RequestBody は文字通りリクエストの本文を意味します。リクエストを作成したとき、パラメータを本文に入れて渡しました。アノテーションは、「予想どおり、Tomcat を再起動するのを待ちきれず、Postman で呼び出しました。今回は、ブレークポイントには入らず、例外が直接報告されました:

org.springframework」。 http.converter.HttpMessageNotReadableException: 必要なリクエスト本文がありません: public boolean com.scdq.manager.controller.SystemController.login(java.lang.String)

例外の一般的な意味は、必要なリクエスト本文が存在しないことです。関連情報を照会すると、RequestBody をこのようにすることはできないことがわかりました。使用するには、クラスを作成し、クラス内で関連するパラメーターを定義し、このクラスを RequestBody アノテーションのパラメーターのタイプとして使用する必要があります

#この方法でコードを変更し、Tomcat を再起動し、Postman を使用して呼び出してから、再度例外を報告します:

org.springframework.web.HttpMediaTypeNotSupportedException:コンテンツ タイプ 'application/x-www-form-urlencoded' はサポートされていません

例外の一般的な意味は、コンテンツ タイプが application/x-www-form-urlencoded であるということです。通常、データは、 formのデフォルトはこの型になっているのですが、RequestBodyアノテーションのせいかもしれないので変更してみました パラメータの受け渡し方法:JSON形式でデータを渡します

#

このパラメータの受け渡し方法を利用すると、確かにパラメータの値を受け取ることができますが、パラメータの受け取り方法とパラメータの受け渡し方法が複雑になってしまいます。私はこのプロジェクトを会社から家にコピーして書き続けました。会社にいるときはすべて問題なくデバッグできましたが、家に帰ると動作しませんでした。困惑しました。同じコードを変更したわけではありませんが、それで、なぜ家に帰ったときに何か問題が起こったのでしょうか?コードは同じでも実行結果が異なるということは、実行環境が変わっただけということになります。では、具体的にどこが環境の違いなのでしょうか?このような問題が発生した場合、まずデータベースの構造を検討しますが、自宅のコンピュータのデータベースのバージョンは会社のコンピュータと同じであり、データは会社から直接コピーされているため、データベースは直接除外されます。コントローラーで受信されることは言うまでもなく、パラメーターとデータベースへのアクセス手順がなければ、データベースに関連する可能性はさらに低くなり、データベースの原因を直接除外することができます。プロジェクトはmavenでビルドされているので、関連するjarパッケージはmavenによって自動的にダウンロードされるので、mavenが自動的にダウンロードするjarパッケージに問題があるのではないかと思い、ローカルウェアハウスにあるjarパッケージをすべて削除して、mavenを再起動させます. ダウンロードして何度か繰り返しましたが、問題は解決せず、仕方なく一時的にmavenの原因を排除しました。結局、他に原因が思いつかなかったので、会社のTomcatのバージョンが7.0、自宅のTomcatのバージョンが8.0で、Tomcatのバージョンが一致していないのですが、Tomcatの原因を疑い始めました。 Tomcat のバージョンに違いないと無意識に思っているのですが、結局のところ、8.0 は 7.0 の後の機能のアップグレードに違いないと無意識に思っています。そう思いながらも、死馬、生医者の精神で試験に臨み、tomcat公式サイトから7.0版の圧縮パッケージをダウンロードし、対応する環境を構築してpostmanで呼び出しました。 . 結果は予想外でした。パラメータ値は取得できましたか? ! ! !本当にTomcatのバージョンが原因なのでしょうか?これでは退屈すぎる気がします。 。 。 。やみくもに上位バージョンを追求するのは良いことではないようです [関連する推奨事項: Java チュートリアル ]

以上がSpring MVCでパラメータの値が正常に取得できない問題の解決方法(コード付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。