Estoy usando jackson 2.2 anotación @JsonProperty con la necesaria establecida en true. Mientras deserializar archivo json que no contiene esa propiedad a través de ObjectMapper readValue() el método no es la excepción está siendo lanzado.
Se supone que funciona de una manera diferente o ¿me he perdido algo?
Mi clase dto:
public class User {
public enum Gender {MALE, FEMALE}
;
public static class Name {
private String _first, _last;
public String getFirst() {
return _first;
}
public String getLast() {
return _last;
}
public void setFirst(String s) {
_first = s;
}
public void setLast(String s) {
_last = s;
}
}
private Gender _gender;
private Name _name;
private boolean _isVerified;
private byte[] _userImage;
@JsonProperty(value ="NAAME",required = true)
public Name getName() {
return _name;
}
@JsonProperty("VERIFIED")
public boolean isVerified() {
return _isVerified;
}
@JsonProperty("GENDER")
public Gender getGender() {
return _gender;
}
@JsonProperty("IMG")
public byte[] getUserImage() {
return _userImage;
}
@JsonProperty(value ="NAAME",required = true)
public void setName(Name n) {
_name = n;
}
@JsonProperty("VERIFIED")
public void setVerified(boolean b) {
_isVerified = b;
}
@JsonProperty("GENDER")
public void setGender(Gender g) {
_gender = g;
}
@JsonProperty("IMG")
public void setUserImage(byte[] b) {
_userImage = b;
}
}
Esto es ¿cómo puedo deserializar la clase:
public class Serializer {
private ObjectMapper mapper;
public Serializer() {
mapper = new ObjectMapper();
SimpleModule sm = new SimpleModule("PIF deserialization");
mapper.registerModule(sm);
}
public void writeUser(File filename, User user) throws IOException {
mapper.writeValue(filename, user);
}
public User readUser(File filename) throws IOException {
return mapper.readValue(filename, User.class);
}
}
Así es como se llama en realidad:
Serializer serializer = new Serializer();
User result = serializer.readUser(new File("user.json"));
Realidad json parece:
{"GENDER":"FEMALE","VERIFIED":true,"IMG":"AQ8="}
Yo esperaría que desde _name no es especificado en el archivo json y es necesario que la excepción será lanzada.
Como por Jackson anotaciones javadocs: «tenga en cuenta que a partir de 2.0, esta propiedad NO es utilizado por BeanDeserializer: la ayuda se espera que se agreguen para una posterior menor de la versión.»
Que es: no hay validación se realiza utilizando esta configuración. Es sólo (en la actualidad) que se utiliza para la generación de JSON Esquema, o por el código personalizado.
Con Jackson 2.6 se puede utilizar, sin embargo usted tiene que hacer uso de JsonCreator
Por ejemplo:
Si x o y no están presentes se producirá una excepción al intentar deserializar ella.