【发布时间】:2016-07-05 17:15:22
【问题描述】:
我需要验证来自请求正文的传入 json,一些字段是必需的,但如果 json 没有它,它们将被检索为 null:
@Document(collection = "menus")
public class Module {
/** The module name as unique identifier. */
@Indexed(unique = true)
private String name;
/** The internationalization key. */
private String i18n;
/** The Angular state. */
private String state;
...
}
如果传入的json有这个结构,没有名字:
{
"i18n": "INVOICES",
"state": "/invoices"
}
Module 有效且持久化为:
{
"name": null,
"i18n": "INVOICES",
"state": "/invoices"
}
为了验证这个传入的 json,我创建了一个这样的验证器:
public class MenuValidator implements Validator {
/** The menu service. */
private MenuService service;
public MenuValidator(MenuService service) {
this.service = service;
}
@Override
public boolean supports(Class<?> objectClass) {
return objectClass.equals(Module.class);
}
@Override
public void validate(Object object, Errors errors) {
try {
String name = ((Module) object).getName());
if(name==null){
errors.rejectValue("name", "name.null","The module name is null");
}
...
}
但这太棘手了,当我有一个复杂的结构并且我需要验证所有字段时。是否有任何选项可以在不逐字段验证的情况下验证我的结构?
【问题讨论】:
-
只是给你一个指针,如果你输入的请求是通用的,你可以创建 json 模式,并使用 json 模式进行客户端验证。检查davidwalsh.name/json-validation。
标签: java json validation