我收到一个json编码的字符串,然后我将其解码为pojo,如下所示:
String json = ...
final ObjectMapper mapper = new ObjectMapper();
MyPojo obj = mapper.readValue(json, MyPojo.class);
Run Code Online (Sandbox Code Playgroud)
我希望能够验证这一输入,但我不确定这样做的"正确方法"是什么.
假设MyPojo的定义如下:
@JsonIgnoreProperties(ignoreUnknown=true)
class MyPojo {
public static enum Type {
One,
Two,
Three;
@JsonValue
public String value() {
return this.name().toLowerCase();
}
}
private String id;
private Type type;
private String name;
public String getId() {
return this.id;
}
public void setId(String id) {
this.id = id;
}
public Type getType() {
return this.type;
}
public void setType(Type type) {
this.type = type;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
}
Run Code Online (Sandbox Code Playgroud)
我想验证三件事:
如果验证失败,我想返回一条有意义且可读的消息.
对于第一个和第三个问题,我可以简单地检查对象的所有成员,看看是否有空,如果没有根据标准测试它们,但是当有许多字段时,这种方法会变得冗长而复杂.
至于第二个问题,如果输入中的值与其中一个枚举值不匹配,JsonMappingException则抛出a,因此我设法执行此操作:
try {
MyPojo obj = mapper.readValue(json, MyPojo.class);
}
catch (JsonMappingException e) {
return "invalid value for property: " + e.getPath().get(0).getFieldName();
}
Run Code Online (Sandbox Code Playgroud)
但是如何获取输入中的值以便我可以返回:invalid value: VALUE for property: PROPERTY?
谢谢.
我建议使用JSR-303 Bean Validation的实现。该规范定义了一组注释和 XML 配置文件,用于指定您希望在域对象上验证的约束。参考实现可在此处获取:
| 归档时间: |
|
| 查看次数: |
3121 次 |
| 最近记录: |