5
我收到一个JSON编码字符串,然后我把它解码成一个POJO,像这样JSON时:验证解码使用杰克逊
String json = ...
final ObjectMapper mapper = new ObjectMapper();
MyPojo obj = mapper.readValue(json, MyPojo.class);
我希望能够验证此输入,但我不知道做这件事的“正确方法”是什么?
比方说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;
}
}
有我想验证三件事情:
- 所有成员都值
- 这枚举值是枚举 的一部分
- 根据某些标准测试部分或全部值(例如:最小或最大长度,最小或人数值,正则表达式等)
如果验证失败,我想返回一个有意义且可读的消息。
对于第一个和第三个问题,我可以简单地检查对象的所有成员,看看是否有空,如果没有按照标准对它们进行测试,但是当有许多字段时,这种方法可能会变得漫长而复杂。
至于第二个问题,如果输入的值不匹配的枚举值则JsonMappingException
被抛出的一个,所以我成功地做到这一点:
try {
MyPojo obj = mapper.readValue(json, MyPojo.class);
}
catch (JsonMappingException e) {
return "invalid value for property: " + e.getPath().get(0).getFieldName();
}
但我怎么得到在输入值中,我可以返回:invalid value: VALUE for property: PROPERTY
?
谢谢。
谢谢,这看起来很有趣,我会检查出来,但它不正是我一直在寻找的......我不知道是否有杰克逊至少验证我发布的前两个问题。 – 2012-07-06 13:37:18