【问题标题】:validating a JSON list as the root object with spring mvc使用 spring mvc 验证 JSON 列表作为根对象
【发布时间】:2014-08-13 19:34:42
【问题描述】:

我需要验证类似于以下内容的 JSON 列表:

[{"op":"A","path":"C","value":"B"},...]

在 Spring MVC 应用程序中 - 我目前正在反序列化(使用默认 Jackson)到以下行的对象:

public class Operations extends ArrayList<Operation>{}
public class Operation {
     @NotEmpty
     public String op;
     @NotEmpty
     public String path;
     public Object value;

     public void setOp(String op)... and other getters/setters

}

但我不知道如何获取参考休眠实现提供的 jsr303 验证以触发操作的属性。

如果我将列表包装在一个类中,我可以让它发挥作用,但是我的 JSON 格式不正确,例如:

{"ops":[{"op":"A",...},...]}

是否可以验证第一个对象(操作)?如果不是,是否可以将第一种格式(即 JSON 列表)序列化为第二种格式的对象(即包装在具有占位符字段的占位符对象中的列表)

更新 由于未能找到在裸 ArrayList 上触发 jsr303 验证的方法,我编写了一个自定义的 jackson json 反序列化器,以将其粘贴到带有注释字段的包含对象中

@JsonDeserialize(using=OperationsDeserializer.class)
public class Operations {
    @NotEmpty
    private ArrayList<Operation> ops;
    public void setOps(ArrayList<Operation>ops)...
    public ArrayList<Operation> getOps()...
}

这可行,但现在我的 api 的任何自动生成的文档都会生成带有虚拟“ops”字段的 json 示例 - 即 {"ops" : [ ... ] }

所以继续搜索在不是另一个对象的字段的 ArrayList 上触发 jsr303 验证的方法 - 也许有一种方法可以在运行时注入代理包装类来解决这个问题?

【问题讨论】:

    标签: json validation spring-mvc bean-validation


    【解决方案1】:

    使用ObjectMapper.class。它有一个方法可以将Json Object 转换为Class Object

    方法是,new ObjectMapper().readValue(String str, Class&lt;T&gt; valueType)

    因此您可以迭代您的 Object 数组,转换为字符串并将其传递给此方法以获取结果。

    它看起来像,

    new ObjectMapper().readValue(object.toString, Operation.class);
    

    【讨论】:

      猜你喜欢
      • 2012-09-22
      • 2012-04-06
      • 1970-01-01
      • 2015-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-24
      相关资源
      最近更新 更多