サーバー側とクライアント側の間でフィールド制約を共有する

ラファエル:

私はプロジェクトに取り組んでいます。サーバー側はSpring Boot 2に基づいており、フロントエンドはAngularに基づいています。

サーバー側では、データモデルクラスに次のような宣言があります。

@Column(length = 256, nullable = false)
@Size(max = 256)
private String subject;

フロントエンド(角度側)にもフィールド長の検証を実装したいと思います。

サーバー側とクライアント側の間でフィールド長の制約を共有するための最良のアプローチは何ですか?

私は自分自身を繰り返す必要があるという考えと、両側(サーバー側とクライアント側)でフィールド長をハードコードする必要がありません。

私がこのような定数のセットを宣言する場合、それは私の場合に最適なアプローチですか?

private static final int maxSubjectLength = 256;

次のように使用します。

@Column(length = maxSubjectLength, nullable = false)
@Size(max = maxSubjectLength)
private String subject;

次に、これらの定数を使用して構成クラスを作成します。どのインスタンスにGEThttp-requestを介してアクセスできますか?

またはより良いアプローチがありますか?

ラファエル:

私は次のアプローチを使用することにしました。Questionプロパティを持つモデルクラスがあるとしますbody

@Entity
@Table(name = "Questions")
public final class Question {

    // other properties & code

    private String body;

    // other properties & code
}

また、本体の長さを1024シンボルに制限し、この制限をサーバーで1回だけ定義し、アプリケーションのバックエンドとフロントエンドでこの制限を使用します。

サーバー側では、モデルクラスでQuestion、すべてのクラスプロパティのサイズ制限を含む静的マップを定義します。

@Entity
@Table(name = "Questions")
public final class Question {

    private static class ModelConstraints {
        static final int MAX_BODY_LENGTH = 1024;
        // limits for other fields are going here
    }

    private static final Map<String, Integer> modelConstraintsMap;

    static
    {
        final Map<String, Integer> localConstraintsMap = new HashMap<>();
        localConstraintsMap.put("MAX_BODY_LENGTH", ModelConstraints.MAX_BODY_LENGTH);
        // .... putting all constants from ModelConstraints to the map here

        // composing unmodifable map    
        modelConstraintsMap = Collections.unmodifiableMap(localConstraintsMap);
    }

    @Column(length = ModelConstraints.MAX_BODY_LENGTH, nullable = false)
    @Size(max = ModelConstraints.MAX_BODY_LENGTH)
    private String body;

    // other properties and code

    public static Map<String, Integer> getModelConstraintsMap() {
        return modelConstraintsMap;
    }   

    // other properties and code
}

内部クラスにModelConstraintsは、関連するすべてのモデルプロパティの最大長の値の定義が含まれています。

静的ブロックで、これらの制約を含む変更不可能なマップを作成し、このマップをパブ​​リックメソッドを介して返します。

コントローラーには、モデルクラスに関連して、プロパティの長さの制約を返すレストエンドポイントを追加します。

@RequestMapping(path = "/questions/model-constraints", method = RequestMethod.GET, produces = "application/json")
public ResponseEntity<Map<String, Integer>> getModelConstraints() {
    return new ResponseEntity<>(Question.getModelConstraintsMap(), HttpStatus.OK);
}

このメソッドは、プロパティの長さの制約を持つマップのjson表現を返します。

(角度のある)fron-tendでは、このエンドポイントを呼び出しmaxlengthて、モデルクラスプロパティに関連するフォームフィールドのプロパティを設定します。

コンポーネントのtypescriptファイルに、このメソッドを追加して呼び出します。

  loadConstraints() {
    var url: string = "/questions/model-constraints";
    this.http
      .get(url)
      .subscribe((data: Map<string, number>) => (this.modelConstraints = data));
  }

また、このメソッドの呼び出し後、コンポーネントプロパティmodelConstraintsにはフィールド長の制約を持つマップが含まれます。

これらの制約はコンポーネントテンプレート(html)ファイルで設定します。

  <textarea
    matInput
    rows="7"
    placeholder="Question body"
    maxlength="{{ modelConstraints['MAX_BODY_LENGTH'] }}"
    [(ngModel)]="questionBody"
  ></textarea>

それでおしまい。このアプローチを使用すると、サーバーでフィールド長を1回だけ定義し、サーバーとクライアントでこの定義を使用できます。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

ノードアプリとクライアント側のJavaScript間で構成を共有する

分類Dev

openvpnでクライアント側のインターネット接続をサーバー側と共有する方法は?

分類Dev

クライアント側だけでなくサーバー側の検証を強制する方法は?

分類Dev

GraphQL:クエリ間でサーバー側のフィールドを制限する方法は?

分類Dev

サーバー側のページングとクライアント側のフィルタリング

分類Dev

ノード内のクライアントとサーバー間で変数を共有する

分類Dev

クライアント側とサーバー側でのファイル名のスクラビング

分類Dev

「クライアント側ルーティング」または「サーバー側ルーティング」を使用するのはいつですか?

分類Dev

クライアント側とサーバー側の形式の間でデータを変換するための正しい用語は何ですか?

分類Dev

Meteorのサーバーコードとクライアントコード間でグローバル変数を共有する方法

分類Dev

クライアントとサーバーのマングースモデル間でtypescriptインターフェースを共有する

分類Dev

トークンでクライアント側とサーバー側を認証する正しい方法は?

分類Dev

日付はクライアント側とサーバー側(GWT)の間で変更されます

分類Dev

Gatsbyがサードパーティのライブラリをクライアント側のjsバンドルに含めるのはいつですか?

分類Dev

クライアント側とサーバー側でAngularJSフォームを検証するための信頼できる唯一の情報源(DRY)

分類Dev

クライアント側のjavascriptおよびサーバー側のNodeJsモジュールで動作するjavascriptコードを記述します

分類Dev

asp.netを使用してサーバー側でクライアント側のファイルにアクセスする方法

分類Dev

クライアント側でjavaを実行すると、サーバー側でnullPointerExceptionが表示されます

分類Dev

JavaScript:サーバー側とクライアント側の両方で実行されるDOM依存コードのベストプラクティス?

分類Dev

メディアファイルの期間を取得する(サーバー側)

分類Dev

MeteorJSでのクライアント側とサーバー側の検証

分類Dev

フィールドで1つのピリオド/小数のみを制限する(クライアント側の検証)正規表現-JavaScript

分類Dev

クライアントとサーバー間でモデルを共有する

分類Dev

サーバー側とクライアント側の両方でrecvと送信機能を呼び出すときにクライアントのファイル記述子が使用されるのはなぜですか?

分類Dev

HTML5:クライアント側とサーバー側の両方でWebフォームを検証する必要がありますか、それともクライアント側だけで検証できますか?

分類Dev

HTTPリファラー(クライアント側)またはIPアドレス(サーバー側)によってGoogleAPIキーを制限します

分類Dev

サーバー側の更新をクライアント側で追跡する方法は?

分類Dev

クライアント側のルーティングは、角度のあるユニバーサルで提供されるサーバー側のルーティングとともに推奨されますか?

分類Dev

Flask / Socketioでサーバーのインターフェースを使用するサーバー側で「ダミークライアント」を生成する方法

Related 関連記事

  1. 1

    ノードアプリとクライアント側のJavaScript間で構成を共有する

  2. 2

    openvpnでクライアント側のインターネット接続をサーバー側と共有する方法は?

  3. 3

    クライアント側だけでなくサーバー側の検証を強制する方法は?

  4. 4

    GraphQL:クエリ間でサーバー側のフィールドを制限する方法は?

  5. 5

    サーバー側のページングとクライアント側のフィルタリング

  6. 6

    ノード内のクライアントとサーバー間で変数を共有する

  7. 7

    クライアント側とサーバー側でのファイル名のスクラビング

  8. 8

    「クライアント側ルーティング」または「サーバー側ルーティング」を使用するのはいつですか?

  9. 9

    クライアント側とサーバー側の形式の間でデータを変換するための正しい用語は何ですか?

  10. 10

    Meteorのサーバーコードとクライアントコード間でグローバル変数を共有する方法

  11. 11

    クライアントとサーバーのマングースモデル間でtypescriptインターフェースを共有する

  12. 12

    トークンでクライアント側とサーバー側を認証する正しい方法は?

  13. 13

    日付はクライアント側とサーバー側(GWT)の間で変更されます

  14. 14

    Gatsbyがサードパーティのライブラリをクライアント側のjsバンドルに含めるのはいつですか?

  15. 15

    クライアント側とサーバー側でAngularJSフォームを検証するための信頼できる唯一の情報源(DRY)

  16. 16

    クライアント側のjavascriptおよびサーバー側のNodeJsモジュールで動作するjavascriptコードを記述します

  17. 17

    asp.netを使用してサーバー側でクライアント側のファイルにアクセスする方法

  18. 18

    クライアント側でjavaを実行すると、サーバー側でnullPointerExceptionが表示されます

  19. 19

    JavaScript:サーバー側とクライアント側の両方で実行されるDOM依存コードのベストプラクティス?

  20. 20

    メディアファイルの期間を取得する(サーバー側)

  21. 21

    MeteorJSでのクライアント側とサーバー側の検証

  22. 22

    フィールドで1つのピリオド/小数のみを制限する(クライアント側の検証)正規表現-JavaScript

  23. 23

    クライアントとサーバー間でモデルを共有する

  24. 24

    サーバー側とクライアント側の両方でrecvと送信機能を呼び出すときにクライアントのファイル記述子が使用されるのはなぜですか?

  25. 25

    HTML5:クライアント側とサーバー側の両方でWebフォームを検証する必要がありますか、それともクライアント側だけで検証できますか?

  26. 26

    HTTPリファラー(クライアント側)またはIPアドレス(サーバー側)によってGoogleAPIキーを制限します

  27. 27

    サーバー側の更新をクライアント側で追跡する方法は?

  28. 28

    クライアント側のルーティングは、角度のあるユニバーサルで提供されるサーバー側のルーティングとともに推奨されますか?

  29. 29

    Flask / Socketioでサーバーのインターフェースを使用するサーバー側で「ダミークライアント」を生成する方法

ホットタグ

アーカイブ