recibo una cadena JSON codificado y luego decodificarlo en un POJO, así:de validación cuando se decodifica usando JSON Jackson
String json = ...
final ObjectMapper mapper = new ObjectMapper();
MyPojo obj = mapper.readValue(json, MyPojo.class);
Quiero ser capaz de validar esta entrada, pero no estoy seguro ¿cuál es la "manera correcta" de hacerlo?
Digamos MyPojo se define así:
@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;
}
}
Hay tres cosas que quiero para validar:
- Que todos los miembros tienen valores
- Que el valor de enumeración es parte de la enumeración
- Pruebe algunos o todos los valores en función de algunos criterios (es decir, duración mínima o máxima, valor numérico mínimo o masculino, expresión regular, etc.)
Si la validación falla, deseo devolver un mensaje significativo y legible.
Para el primer y tercer problema, simplemente puedo verificar todos los miembros del objeto y ver si alguno es nulo, y si no los prueba con los criterios, pero este enfoque puede ser largo y complicado cuando hay muchos campos.
En cuanto a la segunda cuestión, si el valor de la entrada no coincide con uno de los valores de la enumeración luego se lanza un JsonMappingException
, y así me las arreglé para hacer esto:
try {
MyPojo obj = mapper.readValue(json, MyPojo.class);
}
catch (JsonMappingException e) {
return "invalid value for property: " + e.getPath().get(0).getFieldName();
}
Pero ¿Cómo llego el valor en la entrada para que pueda devolver: invalid value: VALUE for property: PROPERTY
?
Gracias.
Gracias, esto parece interesante y voy a echarle un vistazo, pero no es exactamente lo que estaba buscando ... Me pregunto si hay un Jackson forma de, al menos, validar los primeros 2 números que publiqué. –