【问题标题】:Java validate incoming json matches with the model ClassJava 验证传入的 json 是否与模型类匹配
【发布时间】: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


【解决方案1】:

不,我认为此类验证没有其他选择。您需要手动检查每个属性。

谢谢

【讨论】:

    猜你喜欢
    • 2022-01-16
    • 1970-01-01
    • 2014-06-09
    • 1970-01-01
    • 2020-03-15
    • 2021-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多