适用于Android的JSR-303兼容bean验证程序
是否真的有可能没有JSR-303兼容的Android验证器 Hibernate验证程序似乎与Android不兼容(ClassNotFound异常),然后。。。我找不到别的东西了 我发现了Metawidget——但在他们的网站上,他们说“Metawidget附带了现有前端的本地UI组件”——我不需要额外的UI组件 以下是我在后端的内容:适用于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
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中的“模仿”,用于客户端-服务器应用程序,并有一个“中心位置”来定义验证规则。
为此,您可能需要以下几点:
如果这是一个没有服务器的android应用程序,那么我想你应该尝试移植JSR303的源代码,以便与android一起使用我不是android方面的专家,但据了解,在这个环境中,
ServiceLoader
存在问题(BV使用它来加载提供者)。您可以尝试这样显式地指定提供程序:Validation.byProvider(HibernateValidator.class).configure().buidValidatorFactory()
;几分钟前我试过这个-同样的结果。我也尝试过ApacheValidationProvider,同样。我认为这是一个更普遍的问题。如果Android在运行时加载这些验证程序类,它似乎会失败。请尝试插入您自己的ValidationProviderResolver
(通过providerResolver()
),它只返回HibernateValidator
。这将绕过默认提供程序解析程序使用的服务加载程序。