【问题标题】:Java | Validating JSON objects inside wrapper爪哇 |验证包装器内的 JSON 对象
【发布时间】:2017-08-10 07:03:58
【问题描述】:

我正在使用 Java Spring 框架并在输入时接收 JSON。它由数千个MyObjects 组成。如果MyObjectsAnotherObjects 之一失败约束(@NotNull@Size),我希望应用程序抛出异常。 到目前为止,应用程序在对对象执行某些操作时(而不是在其构造期间)访问null 字段时会抛出NullPointerException

我的问题是:

有没有办法检查嵌套 JSON 对象的约束,最好使用注解?

JSON 看起来像:

{
  "myObjects": [
    {
      "code": "PQ",
      "another_objects": [
        {
          "attr1": "value1",
          "attr2": "value2",
          "attrN": "valueN"
        },
        {
          "attr1": "value1",
          "attr2": "value2",
          "attrN": "valueN"
        }
      ]
    },
    {
      ...
    }
  ]
} 

servlet 如下所示:

@RequestMapping(value = ...)
public final void doSomething(@Valid @RequestBody MyObjectWrapper wrapper) {
    // do something very time-heavy here
}    

对象定义如下:

public class MyObjectWrapper {
    private List<MyObject> myObjects;

    public List<MyObject> getMyObjects() {
        return myObjects;
    }

    public void setMyObjects(List<MyObjects> myObjects) {
        this.myObjects = myObjects;
    }
}

还有 MyObject 类:

public class MyObject {

    @NotNull
    @NotEmpty(message = ...)
    List<AnotherObject> anotherObjects;

    @NotNull
    @Size(min = 2, max = 2, message = ...)
    String code;

    @JsonCreator
    public MyObject(@JsonProperty("another_objects") List<AnotherObjects> anotherObjects,
                    @JsonProperty("code") String code) {
        this.code = code;
        this.anotherObjects = anotherObjects;
    }

    /*  getters and setters */
}

AnotherObjects 类似,但仅包含字符串。

【问题讨论】:

    标签: java json spring spring-boot bean-validation


    【解决方案1】:

    @Valid 添加到包装器的嵌套对象中

    public class MyObjectWrapper {
        @Valid
        private List<MyObject> myObjects;
    
        public List<MyObject> getMyObjects() {
            return myObjects;
        }
    
        public void setMyObjects(List<MyObjects> myObjects) {
            this.myObjects = myObjects;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2011-01-07
      • 1970-01-01
      • 1970-01-01
      • 2011-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多