ricevo una stringa JSON codificato e poi decodificarlo in un POJO, come questo:convalida quando si decodifica JSON utilizzando Jackson
String json = ...
final ObjectMapper mapper = new ObjectMapper();
MyPojo obj = mapper.readValue(json, MyPojo.class);
Voglio essere in grado di convalidare questo ingresso, ma non sono sicuro qual è il "modo giusto" per farlo.
Diciamo MyPojo si definisce in questo modo:
@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;
}
}
Ci sono tre cose che voglio per convalidare:
- che tutti i membri hanno valori
- che il valore enum fa parte dell'enumerazione
- Prova alcuni o tutti i valori rispetto ad alcuni criteri (es .: lunghezza min o massima, valore minimo o numero uomo, espressione regolare, ecc.)
Se la convalida fallisce, voglio restituire un messaggio significativo e leggibile.
Per la prima e la terza problemi posso semplicemente controllare tutti i membri dell'oggetto e vedere se ce ne sono nulli, e se non li prova contro i criteri, ma questo approccio può ottenere lungo e complicato quando ci sono molti campi.
Per quanto riguarda il secondo problema, se il valore in ingresso non corrisponde a uno dei valori di enumerazione poi un JsonMappingException
è lanciata, e così sono riuscito a fare questo:
try {
MyPojo obj = mapper.readValue(json, MyPojo.class);
}
catch (JsonMappingException e) {
return "invalid value for property: " + e.getPath().get(0).getFieldName();
}
Ma come faccio ad ottenere il valore nell'input in modo che possa restituire: invalid value: VALUE for property: PROPERTY
?
Grazie.
Grazie, questo sembra interessante e io il check-out, ma non è esattamente quello che stavo cercando ... Mi chiedo se c'è un Jackson modo di convalidare almeno i primi 2 numeri che ho postato. –