让我们想象一下,我们有一个进程,它接受以下类型的数据:
{"date":"2014-05-05", "url":"http://some.website.com","counter":3}
Run Code Online (Sandbox Code Playgroud)
date应该是一个可解析的日期,url也应该符合正常的 url 语法。date应该在未来,url应该是一个可访问的地址,返回200 OK.为了使它干净,必须将这两个验证例程分成不同的单元(类、实用程序等)。然而,所需的最终行为必须让用户清楚地了解数据中存在的所有违规行为。就像是:
{"Errors":[
"Specified date is not in the future",//Formal validation failed
"Specified URL has invalid syntax"//Logical validation failed
]}
Error对象的实现,并且充满了像Error.hasErrors()or之类的检查
error==null,这看起来并不优雅。javax.validation,它同时为您提供所有领域的所有违规行为。可以为内容验证实施相同的方法,但我不确定这是执行此操作的最佳方法。问题:处理各种性质的多个异常/违规的最佳做法是什么?
UPD:答案的简短摘要: collect Violations, build an Exception,包含它们的上下文、原因和描述,使用拦截器进行渲染。请参阅答案中的参考链接:
http://beanvalidation.org/1.0/spec/ JSR 303 规范
http://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/validation.html Spring Bean 验证
http://docs.oracle.com/javaee/6/tutorial/doc/gircz.html Java EE 验证