java 校验安卓登录_android上的java bean 校验-Hibernate Validator移植

Hibernate Validator on Android

github.com/hss01248/An…1725f37220b07406

适用场景

拿到后台数据后,如何更高效地校验数据有效性,而不是在代码里写一堆if else判断?

Bean Validation 2.0(JSR 380)定义了用于实体和方法验证的元数据模型和API,Hibernate Validator是目前最好的实现.如何移植到安卓上呢?

参考:

stackoverflow.com/questions/2…

hibernate.org/validator/d…

使用

初始化

BeanValidator.init(this);

复制代码

使用

4a7b8de5d834658c1c557724fc8ea090.png

提供了中英文的默认文案:

5ba4fde399559f8a36d757c7fea8789a.png

7a3f65d58e2ca191d9b05bd234c808d0.png

自定义配置文案:

fc3268edc3de58f5a3fb79b987ee6ba0.png

校验:

String errorMsg = BeanValidator.validate(bean);

//返回的errorMsg为空就说明校验通过

if(!TextUtils.isEmpty(errorMsg)){

Toast.makeText(this,errorMsg,Toast.LENGTH_LONG).show();

}else {

//拿到合格的bean

}

复制代码

retrofit使用

Retrofit retrofit = new Retrofit.Builder()

.addConverterFactory(GsonConverterFactoryWithBeanValidator.create())

复制代码

d8166e49b7fdd3e133d1fff0f0332418.png

返回的msg的格式:

可以直接显示给用户

2b85fe224c04f5862b86a70116c9610c.png

gradle使用:

implementation 'com.github.hss01248.AndroidBeanValidator:beanvalidator:1.0.1'

implementation 'com.github.hss01248.AndroidBeanValidator:gsonconvertervalidator:1.0.1'

复制代码

注意

不能混淆相关的string资源.

如果使用微信的资源混淆工具andresgruard,可以将验证翻译放到同一个xml文件中,然后添加忽略.

比如:

andResGuard {

use7zip = false

useSign = true

// it will keep the origin path of your resources when it's true

keepRoot = false

whiteList = [

"R.string.validator_msg",

....

复制代码

方法耗时

100-300ms

主要耗时是框架内部反射.

77f9db789191964b873ed0fa578df490.png

应该放到网络框架json解析的下一步,不要放到主线程

hibernate的校验模式

上面例子中一次性返回了所有验证不通过的集合,通常按顺序验证到第一个字段不符合验证要求时,就可以直接拒绝请求了。Hibernate Validator有以下两种验证模式:

1、普通模式(默认是这个模式)

普通模式(会校验完所有的属性,然后返回所有的验证失败信息)

2、快速失败返回模式

快速失败返回模式(只要有一个验证失败,则返回)

两种验证模式配置方式:(参考官方文档)

failFast:true 快速失败返回模式 false 普通模式

.addProperty( "hibernate.validator.fail_fast", isDebugMode() ? "false": "true" )

复制代码

21ec057a3ab1a29c02b4174f0dac5ee6.png

兼容性

首先配置

.ignoreXmlConfiguration()

复制代码

在低版本(api16,19)上报找不到Log_$logger;

IllegalArgumentException: Invalid logger interface org.hibernate.validator.internal.util.logging.Log (implementation not found)

复制代码

解决方法: 将Log_$logger拷出来,包路径不变,类名改成常规名字即可:

2d27177b5ce2622ade5e5f5470e78233.png

注意要编译成功,还需要依赖:

implementation group: 'javax.xml', name: 'jaxb-api', version: '2.1'

implementation group: 'javax.annotation', name: 'javax.annotation-api', version: '1.3.1'

复制代码

至此,可兼容到api16

b739ec46bb5c46d9c0aa4ce35ba1ea56.png

关于找一找教程网

本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。

本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。

[android上的java bean 校验-Hibernate Validator移植]http://www.zyiz.net/tech/detail-137792.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值