2

真的有可能没有适用于 Android 的 JSR-303 兼容验证器吗?

Hibernate 验证器似乎与 Android 不兼容(ClassNotFound 异常)然后......我找不到其他任何东西。

我找到了 Metawidget——但在他们的网站上,他们说“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());
    }

为了避免一堆ifs,我想在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) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:190) 在 android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:175) 在 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?如果是 about 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. 在服务器端定义类以扫描 JSR 303 注释
  2. 您的 android 应用程序将哪些类映射到这些 java bean
  3. 一种获取扫描结果并动态构建规则集的方法
  4. 当已映射对象上的 setter 被激活时,请使用每个规则。

如果这是一个没有服务器的 android 应用程序,那么我想你应该尝试移植 JSR 303 的源代码以与 Android 一起使用

于 2015-09-15T14:02:11.427 回答