2016-07-05 44 views
0

我需要从一个请求主体验证收到的JSON,需要一些字段,但如果JSON没有它,他们只是检索为空:的Java验证传入的JSON匹配与模型类

@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" 
} 

模块是有效的和持久化为:

{ 
    "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"); 
      } 
    ... 
} 

但是,这是如此棘手,当我有一个复杂的结构,我需要验证各个领域。有没有任何选项可以验证我的结构而不需要逐场验证?

+0

只给你一个指针,您可以创建JSON模式,如果你输入的要求是通用的,并与JSON模式的客户端验证。检查https://davidwalsh.name/json-validation。 –

回答

0

不,我不认为有任何其他的替代这种验证。您需要手动检查每个属性。

感谢