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