我已经构建了一个Spring REST服务(Spring 4.0和Java 8),我有一个Employee REST服务,其中Employee类具有以下属性 姓名,年龄,性别,工资,指定,company_id,holiday_entitlement,manager_name&国家。
我希望使用Spring 4.0编写验证层,验证需要根据员工的国家/地区进行动态验证
预期验证
员工姓名,年龄,性别和国家/地区是强制性的。
员工性别必须是男性或女性
员工年龄不得超过70岁且不得少于18岁。
例如 如果该国家是英国,则假期权利不得超过25天 如果该国家/地区为美国,则假期权利不得超过20天 如果该国家是西班牙,则假期权利不得超过30天
同样,如果该国家/地区是英国,那么它只能接受英国指定的预定义名单,其他国家/地区的类似方法。
如果提供了manager_name,那么我需要验证他是否与该员工属于同一公司ID。所以我将不得不查找一些DAO以获得经理的公司ID。
问题
一个。鉴于上述验证要求,我想了解Spring中是否有任何特定的类允许动态验证,例如基于国家/地区。
B中。何时调用验证,请立即将我的JSON转换为Spring对象或在Services层(注释为@Service的类)中转换为Java对象。
℃。我是否仍然在我的员工POJO中使用Spring bean验证JSR 303注释,或者验证是否应该在不同的类esp中针对必需属性?
答案 0 :(得分:1)
答:据我所知,Spring中没有特殊的验证层,javax.validation用于哪个Hibernate是参考实现。真正易于实现的是方法验证,例如,您可以查看https://github.com/flexguse/validation-violation-checker-demo。
B:您可以使用@Valid方法注释直接在Controller方法中进行JSR303验证,但我更愿意在您的服务方法中进行验证,这样您就可以更好地控制在验证错误的情况下响应的内容 - >见https://spring.io/blog/2013/11/01/exception-handling-in-spring-mvc
C:JSR 303注释应该足够了,您需要创建自己的验证注释和验证实现,您应该将其添加到Employee POJO - >见https://softwarecave.org/2014/03/27/custom-bean-validation-constraints/
不要忘记为验证编写JUnit测试!
答案 1 :(得分:0)
我不认为有一个特殊的验证层100%满足您的需求,但是例如,在Spring MVC中,我们有一个验证器接口org.springFramework.validation.Validator
。
它使您可以动态定义规则以使用validate方法验证数据,并通过在控制器中创建绑定器和@Valid来调用它。