私の openapi 仕様では、次のように特定のリソース パスの URL パラメータを指定します。
paths:
/some/path:
get:
summary: some summary
parameters:
name: usefulParameter
description:
schema:
type: string
maxLength: 15
openapi 3.0 codegen を使用して、xxxxDelegate のような名前のインターフェイスを自動的に生成する Spring Boot RESTful API を生成します。これには、次のようなメソッドを実装する必要があります。
default ResponseEntity<Object> somePathGet(String usefulParameter) {
getRequest().ifPresent(request -> {
for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
String exampleString = "null";
ApiUtil.setExampleResponse(request, "application/json", exampleString);
break;
}
}
});
return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
}
インターフェースの上部には次のようなコメントがあります。
{@link YourApiController}} によって呼び出されるデリゲート。
このインターフェースは、{@link org.springframework.stereotype.Service} アノテーション付きクラスを使用して実装します。
それで、まさにそれを実行すると、次のような独自のクラスが作成されます。
@Service
public class MyCustomClass implements xxxxDelegate {
@Override
public ResponseEntity<Object> somePathGet(String usefulParameter) {
}
}
これまでのところ、これは完全に機能します。これを呼び出して、入力パラメータをログに記録できます。私が抱えている問題は、その方法に関するドキュメントがどこにも見つからないことです。その入力パラメータに検証を署名します - Openapi の「maxLength」は適用されておらず、Model 型クラスを使用してメンバーに注釈を付けない限り、Spring/Spring Boot はこれらのパラメータに検証を適用する方法を提供していないようです。私はそれを避け、代わりに、この URL パラメータには最小/最大長や特定の文字セットなどの特定の検証が必要であることを API に伝えることを好みます。
これは可能ですか?
これは解決できましたか?同様の問題に直面しています
– ヴァツァル
2021 年 4 月 12 日 23:06
申し訳ありませんが、解決策は見つかりませんでした。よろしければ最新情報をお知らせください。ありがとう。
– 継続性8
2021 年 4 月 13 日 4:49
------------------------
使用できます
x-field-extra-annotation: "@Email"
API 定義 yaml のフィールド定義内。 org.openapitools.model パッケージに入れれば、自己定義のバリデーターを使用できます。
サーバー側の API 実装では、検証するパラメータの前に @Valid アノテーションを置く必要があります。.
カスタム検証を使用した UUID スキームの例を次に示します (yaml で定義された検証ルールは、生成された Spring-Java コードには影響しないことに注意してください)。
schemas:
UUID:
description: "Format: UUID"
type: "string"
pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$'
minLength: 36
maxLength: 36
example: "097c9a34-ec4c-4766-b29b-f528db4a3ef8"
x-field-extra-annotation: "@UUID"