【发布时间】: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