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

适用于Android的JSR-303兼容bean验证程序,android,bean-validation,Android,Bean Validation,是否真的有可能没有JSR-303兼容的Android验证器 Hibernate验证程序似乎与Android不兼容(ClassNotFound异常),然后。。。我找不到别的东西了 我发现了Metawidget——但在他们的网站上,他们说“Metawidget附带了现有前端的本地UI组件”——我不需要额外的UI组件 以下是我在后端的内容: final String wrongJson = "{\"name\":\"notavalidemail\"}"; final Gson gson

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

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());
    }
final String errorjson=“{\'name\':\'notavalidemail\'”;
最终Gson Gson=新Gson();
最终项目projectFromJson=gson.fromJson(错误的JSON,Project.class);
最终验证器工厂=Validation.buildDefaultValidatorFactory();
final Validator Validator=factory.getValidator();
最终设置constraintViolations=validator.validate(projectFromJson);
assertNotNull(constraintViolations);
for(最终约束冲突:约束冲突){
debug(“Errormessage:{}”,invalition.getMessage());
}
为了避免一大堆的如果,我想在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.TestWithErrorJsonString(ProjectTest.java:90) 位于java.lang.reflect.Method.Invokenactive(本机方法) 在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文件夹中

你到底得到了哪个CNF?如果它是关于
java.beans.Introspector
,那么从HV 5.1.0.Alpha1开始,它就已经被修复了,因此应该在Android上运行。如果是关于其他API,那么知道哪些API是非常有趣的。

在我寻求JSR 343和Angular.js的某种集成之后,我提出了这个问题,这应该比您使用Java开发的Android更加棘手

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

  • 在服务器端定义类以扫描JSR303注释
  • 您的android应用程序映射到这些java bean的类有哪些
  • 一种获得扫描结果并动态构造一组规则的方法
  • 在激活映射对象上的setter时使用每个规则

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

    我不是android方面的专家,但据了解,在这个环境中,
    ServiceLoader
    存在问题(BV使用它来加载提供者)。您可以尝试这样显式地指定提供程序:
    Validation.byProvider(HibernateValidator.class).configure().buidValidatorFactory()
    ;几分钟前我试过这个-同样的结果。我也尝试过ApacheValidationProvider,同样。我认为这是一个更普遍的问题。如果Android在运行时加载这些验证程序类,它似乎会失败。请尝试插入您自己的
    ValidationProviderResolver
    (通过
    providerResolver()
    ),它只返回
    HibernateValidator
    。这将绕过默认提供程序解析程序使用的服务加载程序。