を使用してJSONをデコードする際の検証は、私は、JSONエンコードされた文字列を受け取り、その後、私はこのように、POJOにそれを解読:ジャクソン
String json = ...
final ObjectMapper mapper = new ObjectMapper();
MyPojo obj = mapper.readValue(json, MyPojo.class);
私は、この入力を検証することができるようにしたいが、私はよく分かりませんそれを行う "正しい方法"は何ですか?
@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;
}
}
私が検証する三つのことがあります:
- すべてのメンバーが列挙型の値が列挙 の一部であることを値
- を持っていることが
のはMyPojoは、このように定義されているとしましょう - いくつかの基準(つまり、最小または最大の長さ、最小または人数の値、正規表現など)に対する一部またはすべての値をテストします。
検証が失敗した場合は、わかりやすく読みやすいメッセージを返したいと思います。
第1および第3の問題については、オブジェクトのすべてのメンバーをチェックしてヌルであるかどうかを確認し、基準に照らしてテストしないと、このアプローチは長くなり複雑になることがあります。
第二の問題については、入力の値が列挙値のいずれかと一致しない場合は、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
?
ありがとうございました。
おかげで、これは面白そうだと私はそれをチェックアウトしますが、それは私が探していたものを正確にはありません...私はジャクソンありますかしら私が投稿した最初の2つの問題を少なくとも検証する方法。 –