适用于Android的JSR-303兼容bean验证程序

时间:2013-10-23 20:41:56

标签: android bean-validation

是否真的可能没有针对Android的JSR-303兼容验证器?

Hibernate验证器似乎与Android(ClassNotFound Exception)不兼容,然后......我找不到任何其他内容。

我找到了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) at 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文件夹中

2 个答案:

答案 0 :(得分:0)

CNF你真的得到了什么?如果它大约是java.beans.Introspector,那么从HV 5.1.0.Alpha1开始就固定了这个类型doesn't import,因此应该在Android上运行。如果是关于其他API,那么了解哪些API会非常有趣。

答案 1 :(得分:0)

在我寻求JSR 343和Angular.js的一些集成之后,我开始讨论这个问题,这个问题应该比你的情况更复杂,你使用Java开发Android。

如果你看一下valdr,你会看到一个框架,以angular.js中的模型为中心验证方法,你会看到有一个支持JSR 303的插件。 该插件由几个组件组成,您可能需要考虑在Android中“模仿”,用于客户端 - 服务器应用程序,并且有一个定义验证规则的“中心位置”。 为此,您可能需要以下内容:

  1. 在服务器端定义类以扫描JSR 303注释
  2. 您的Android应用程序映射到这些java bean的哪些类
  3. 获取扫描结果并动态构建一组规则的方法
  4. 当正在激活已映射的对象上的setter时,使用每个规则。
  5. 如果这是一个没有服务器的Android应用程序,那么我猜你应该尝试将JSR 303的源码移植到Android上使用