1

を使用してValidationRulesServlet、API 用の valdr JSON を生成しています。現在、生成された JSON は次のようになります。

{
  "Person" : {
    "firstName" : {
      "size" : {
        "min" : 2,
        "message" : "{javax.validation.constraints.Size.message}",
        "max" : 2147483647
      },
      "required" : {
        "message" : "{javax.validation.constraints.NotNull.message}"
      }
    },
    "lastName" : {
      "size" : {
        "min" : 2,
        "message" : "{javax.validation.constraints.Size.message}",
        "max" : 20
      },
      "required" : {
        "message" : "{javax.validation.constraints.NotNull.message}"
      }
    }
  }
}

REST サービスに Jersey を使用してmessagesおり、上記の JSON の を の値に置き換えたいと考えていますValidationMessages.properties

MyValidationMessages.propertiesはクラスパス ( src/main/resources) にあり、Jackson によって正しく使用されています。これは、無効な値で REST エンドポイントを呼び出すことで確認できます。応答の例を次に示します。

[
  {
    "message": "Must be between 2 and 2147483647 characters",
    "messageTemplate": "{javax.validation.constraints.Size.message}",
    "path": "PersonServiceImpl.updatePerson.arg0.firstName",
    "invalidValue": ""
  }
]

私の対応するメッセージValidationMessages.properties

javax.validation.constraints.Size.message = Must be between {min} and {max} characters

ValidationMessages.propertiesegではなくvaldr JSON からメッセージを出力するにはどうすればよい{javax.validation.constraints.Size.message}ですか?

4

1 に答える 1

1

少なくともそのままではできません。ConstraintBean Validation 仕様を確認するか、 Javadocを見れば、その理由は明らかです。

各制約アノテーションは、次の属性をホストする必要があります。

  • 文字列 message() デフォルト [...]; これは、制約の完全修飾クラス名とそれに続く.message. 例えば {com.acme.constraints.NotSafe.message}

したがって、本質的"message" : "{javax.validation.constraints.Size.message}"に valdr 制約では、JSON は実際の検証ではなくメッセージキーmessageを意味します。JSONプロパティを呼び出してmessageKeyこれを明確にする方が賢明ですが、Bean Validation用語に固執したかったのです。実際、JSON のすべてのプロパティは Bean Validation から 1 つずつ抽出されますConstraint

したがって、Person.firstName.size制約に違反した場合、AngularJS フロントエンドで「2 から 2147483647 文字でなければなりません」と表示する方法が必要です。valdrは angular-translate とうまく統合することでそれを実現します。必要なのはValidationMessages.properties、フロントエンドで利用できるようにし、そのファイルからのメッセージで angular-translate を初期化することだけです。

于 2015-12-23T20:02:11.977 に答える