求分享, Java 有没有什么数据校验的好办法?

2016-03-18 16:05:40 +08:00
 BuilderQiu

大家有没有什么 Java 数据校验的好方法?除了jsr-303那一套的。求分享~

BTW :

5208 次点击
所在节点    问与答
24 条回复
3dwelcome
2016-03-18 16:38:38 +08:00
如果只是防止第三方非法修改数据内容,个人觉得数据发送前做个全局数据流 hash, 然后签名就可以了。

签名不能伪造 => hash 值无法被第三方修改 => 数据流安全。
BuilderQiu
2016-03-18 16:43:43 +08:00
@3dwelcome
不是防篡改这种场景哈 ,就基本的数据校验,字段非空,电话号码格式这种

防篡改加 Hash 这种也只适合服务器之间约定好的通讯吧,客户端 Hash 也没用吧
88250
2016-03-18 16:51:39 +08:00
Controller 参数格式校验一直手写, Service 里面做参数相关业务逻辑的校验
BuilderQiu
2016-03-18 17:32:04 +08:00
@88250
现在也基本都是手写的,不过感觉太繁琐了,场景一多,判断写一堆
Sharuru
2016-03-18 17:34:03 +08:00
=m= 看具体环境吧,比如我现在写的这个,全靠前端 validation 来检测,后台抓个大异常,然后防一下 SQL 注入。
88250
2016-03-18 17:36:24 +08:00
@BuilderQiu 手写比较好控制,其实代码也不会太多的,而且调试方便
fwrq41251
2016-03-18 17:37:42 +08:00
spring mvc @Validated
可以指定 group 。
slixurd
2016-03-18 17:39:10 +08:00
如果传个 Bean 进来,或者传过来的数据可以反序列化为 VO ,我们都把校验逻辑会写在 VO 里
这样可以简单复用一下,比较一个 VO 用在多个地方很正常
BuilderQiu
2016-03-18 17:40:20 +08:00
@Sharuru
后端也得检验哇
BuilderQiu
2016-03-18 17:40:51 +08:00
@88250
主要是代码都差不多,判空之类的
BuilderQiu
2016-03-18 17:41:30 +08:00
@fwrq41251
分组到是可以~不同场景用不同组
BuilderQiu
2016-03-18 17:45:17 +08:00
@slixurd

不同的校验场景没法弄吧这样,而且现在的 Bean 基本都是贫血的吧
Ouyangan
2016-03-18 17:48:14 +08:00
这个问题我也很困惑 , 关注
88250
2016-03-18 18:01:45 +08:00
@BuilderQiu 工具类调用,封装一下返回文案范围值啥的,也就 1 行代码..
murmur
2016-03-18 18:44:26 +08:00
前端无论怎么做后端都要校验 但是有些东西必须失败一次才知道结果 比如唯一性校验 或者涉及外键关联的 那就囧了 是让 try 一下让他报错接着 还是真的去数据库校验一次呢
BuilderQiu
2016-03-18 18:53:33 +08:00
@murmur
😂这种一般都是去查一次吧?虽然还是可能查询的时候不存在,添加的时候已存在了最后进入报错流程……
caixiexin
2016-03-18 20:21:13 +08:00
参数完整性,判空,长度,字符串个数的校验,用 jsr303 够用了呀。
写一个 baseController ,在里面同一捕获 jsr303 的异常,并封装 response 。然后所有 controller 基础它。
剩下的工作就是定义各种错误的 message 和新增接口的时候为每个请求类里面属性加注解了。
另外, Hibernate-validato 不就是 jsr303 的实现吗😂
caixiexin
2016-03-18 20:22:09 +08:00
@caixiexin 字符串个数 ->字符串格式
BuilderQiu
2016-03-18 21:19:33 +08:00
@caixiexin
我就是说 Hibernate-Validator 那种实现😂
想了解看看还有木有其他办法😌
odirus
2016-03-18 21:38:54 +08:00
@caixiexin 谢谢,我也有这个问题。。。一直不是非常明白。

请教一下: hibernate validator 是挺好用的,但是万一我传入的参数不是一个 bean 里面的字段呢?谢谢。主要是写接口的时候,参数和 bean 没任何联系。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/264501

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX