2

Android 用の JSR-303 互換バリデーターが存在しない可能性はありますか?

Hibernate バリデーターは Android (ClassNotFound Exception) と互換性がないようで、それから... 他に何も見つかりませんでした。

Metawidget を見つけましたが、彼らの Web サイトでは、「Metawidget には、既存のフロントエンドにネイティブな UI コンポーネントが付属しています」と書かれています。追加の UI コンポーネントは必要ありません。

バックエンドにあるものは次のとおりです。

    final String wrongJson = "{\"name\":\"notavalidemail\"}";
    final Gson gson = new Gson();
    final Project projectFromJson = gson.fromJson(wrongJson, Project.class);

    final ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
    final Validator validator = factory.getValidator();

    final Set<ConstraintViolation<Project>> constraintViolations = validator.validate(projectFromJson);
    assertNotNull(constraintViolations);

    for (final ConstraintViolation<Project> violation : constraintViolations) {
        logger.debug("Errormessage: {}",violation.getMessage());
    }

たくさんのifを避けるために、Androidでも同じことが必要です-何かヒントはありますか?

[更新] 申し訳ありませんが、ClassNotFound ではありません。

javax.validation.ValidationException: Bean 検証プロバイダーが見つからなかったため、構成を作成できません。Hibernate Validator (RI) などのプロバイダーをクラスパスに追加します。javax.validation.Validation$GenericBootstrapImpl.configure(Validation.java:271) で javax.validation.Validation.buildDefaultValidatorFactory(Validation.java:110) で at.mikemitterer.mobiad.android.util.ProjectTest.testWithWrongJsonString(ProjectTest.java) :90) Android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:175) で Android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:190) で java.lang.reflect.Method.invokeNative(ネイティブ メソッド) で Android. test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:555) で android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1661)

[更新 II ] はい - hibernate-validator-5.1.0.Alpha1.jar は lib フォルダーにあります

4

2 に答える 2

0

あなたは正確にどのCNFを取得しましたか? 約 の場合java.beans.Introspector、これは HV 5.1.0.Alpha1 の時点で修正されており、このタイプはもうインポートされないため、Android で実行する必要があります。他の API に関するものであれば、どの API かを知ることは非常に興味深いでしょう。

于 2013-10-23T21:26:47.873 に答える
0

JSR 343 と Angular.js の統合を探求した結果、この質問にたどり着きました。これは、Java で開発する Android の場合よりもトリッキーになるはずです。

valdrを見ると、 angular.jsでモデル中心の検証アプローチを使用したフレームワークが表示され、JSR 303 をサポートするプラグインが表示されます。プラグインは複数のコンポーネントで構成されているため、Android で「模倣」することを検討することをお勧めします。 、クライアント サーバー アプリケーション用であり、検証のルールを定義する 1 つの「中心的な場所」があります。これには、おそらく次のものが必要になります。

  1. サーバー側でクラスを定義して、JSR 303 アノテーションをスキャンします
  2. Android アプリがこれらの Java Bean にマップされているクラス
  3. スキャン結果を取得し、一連のルールを動的に構築する方法
  4. マッピングされたオブジェクトのセッターがアクティブ化されている場合は、各ルールを使用します。

これがサーバーのない Android アプリの場合は、JSR 303 のソースを Android で使用できるように移植する必要があると思います。

于 2015-09-15T14:02:11.427 に答える