dataType: String、dataTypeClass: class の暗黙的なパラメーター構成を解釈できません

1. 問題の発見

新しいプロジェクトをローカルで開始すると、コンソールにこのようなプロンプト メッセージが多数表示されます。
ここに画像の説明を挿入
システムの通常の動作には影響しませんが、コードをきれいにしている人間としては、このような警告メッセージには耐えられません。これは以下のログ情報です。注釈が付いている swagger パッケージApiImplicitParams

2. 問題解決

dataTypeClass = String.class
このアノテーションが使用されるすべての場所に、次のような属性を追加します。@ApiImplicitParam(name = "page", value = "页码")に変更します@ApiImplicitParam(name = "page", value = "页码", dataTypeClass = String.class)。すべての追加が完了すると、このようなプロンプト情報は表示されなくなります。

3. 問題の探索

解決策について話した後、なぜ増加によってdataTypeClass = String.classこの問題が解決できるのかについて話しましょう。
まず最初に、dataTypeClassこのフィールドの定義を見てみましょう。
ここに画像の説明を挿入
dataTypeClassデフォルト値は ですVoid.class。このフィールドの上に行コメントがあります。Overrides dataType if provided.中国語に翻訳すると、フィールドの値が提供されている (カスタマイズされている) 場合dataTypeClassOperationImplicitParameterReader、その値は上書きされます。提供された dataType 、初めてこのコメントを読んだときは、コンソールに出力されたログ情報に戻って、ログのこの行がクラスに出力されていることがわかるまで、その意味がよくわかりませんでした。この文の意味を理解するために対応するコードを参照し、ログ内でこの文を検索します。
Unable to interpret the implicit parameter configuration with dataType
ここに画像の説明を挿入
このメソッドの 164 行目と 168 行目の間に問題があるのは明らかです。その後、param.dataTypeClass() == Void.class実行します。Class.forName(param.dataType());パラメータ属性dataTypeクラスがロードされるとき、アノテーションにフィールド値ApiImplicitParamがない場合、ロード時に例外メッセージが表示され、この警告が報告されます。値をデフォルトからnonに変更する、最初の if ブロックが移動し、ロードされたクラスはカスタム クラスになります (例: in ) このアノテーションがいつロードされるかについては、自分で調べる必要がありますが、このメソッド内にこのコード行を配置しました残りに興味がある場合は、自分で宝物を見つけることができます〜dataTypeClassNotFoundException
dataTypeClassVoid.classVoid.class
@ApiImplicitParam(name = "page", value = "页码", dataTypeClass = String.class)String.class
ApiImplicitParamOperationImplicitParameterReader.readParameterscontext.findAnnotation(ApiImplicitParam.class);
ここに画像の説明を挿入

-----------知れば知るほど、知らないことも増える -----------

おすすめ

転載: blog.csdn.net/fhf2424045058/article/details/130578658