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.
中国語に翻訳すると、フィールドの値が提供されている (カスタマイズされている) 場合dataTypeClass
OperationImplicitParameterReader
、その値は上書きされます。提供された 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 ) 。このアノテーションがいつロードされるかについては、自分で調べる必要がありますが、このメソッド内にこのコード行を配置しました。残りに興味がある場合は、自分で宝物を見つけることができます〜dataType
ClassNotFoundException
dataTypeClass
Void.class
Void.class
@ApiImplicitParam(name = "page", value = "页码", dataTypeClass = String.class)
String.class
ApiImplicitParam
OperationImplicitParameterReader.readParameters
context.findAnnotation(ApiImplicitParam.class);
-----------知れば知るほど、知らないことも増える -----------