rest - Openapi 3.0 Spring Boot RESTful API で URL パラメーターを検証しますか?

okwaves2024-01-25  8

私の openapi 仕様では、次のように特定のリソース パスの URL パラメータを指定します。

paths:
  /some/path:
    get:
      summary: some summary 
      parameters:
        name: usefulParameter
        description:
        schema:
          type: string
          maxLength: 15

openapi 3.0 codegen を使用して、xxx​​xDelegate のような名前のインターフェイスを自動的に生成する 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"

総合生活情報サイト - OKWAVES
総合生活情報サイト - OKWAVES
生活総合情報サイトokwaves(オールアバウト)。その道のプロ(専門家)が、日常生活をより豊かに快適にするノウハウから業界の最新動向、読み物コラムまで、多彩なコンテンツを発信。