【发布时间】:2016-07-02 19:26:41
【问题描述】:
我正在使用 Spring Boot 和 JPA 编写一个 REST 服务。我需要能够验证一些输入字段,并且我想确保我使用了正确的模式来执行此操作。
假设我有以下模型,并且我也无法控制模型:
{
"company" : "ACME"
"record_id" : "ACME-123"
"pin" : "12345"
"company_name" : ""
"record_type" : 0
"acl" : ['View','Modify']
"language" : "E"
}
我需要做的事情是:
- 确保值不为空 - 使用 @NotEmpty 注释看起来很简单,我可以传递消息。
- 确保该值是有效值列表的一部分 - 此处的示例是上述模型中的语言属性。我希望值是 E、F 或 S。这似乎可以使用自定义注释(例如 @ValidValue({"E","F","S"}))但是有更好/“弹性”的方式这样做?
- 确保列表中的值是有效值列表的一部分 - 这里的示例是 acl 属性。同样,这似乎可以使用 @ValidListValues({"View", "Modify", "Delete", "Hide"}) 之类的自定义注释,但问题与上述相同。
- 设置默认值 - 根据我的阅读,自定义验证器注释只能验证而不能修改。如果值为空,我想做类似@DefaultValue(value=5) 的事情。这可能吗?详情请参阅下文。
- 为静态方法的返回设置默认值 - 例如,如果上面模型中的 pin 字段未设置,我想将其设置为 Util.getRandomDigitsAsString(5) 之类的内容。
- 使用来自另一个属性的值 - 我想验证一个属性是否包含来自另一个属性的字符串。使用示例模型,我想确保 record_id 以公司开头。
我认为这种设置是控制器 -> 服务 -> DTO -> DAO -> 模型的标准方式。我正在考虑的另一个选择是在 validateCreate() 中创建一个方法,该方法将遍历上述所有项目并在需要时抛出异常。
谢谢。
【问题讨论】:
标签: spring rest validation spring-mvc bean-validation