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.

InformationsquelleAutor jaksky | 2013-08-19

2 Comentarios

  1. 23

    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.

    • ¿Cuál es la mejor manera de generar un esquema v. 4 para fines de validación de eso?
    • ObjectMapper mapper = new ObjectMapper(); JsonSchema esquema = mapper.generateJsonSchema(User.class); Cuando puedo generar el esquema de esta manera se afirma durante la validación de esquema no válido
    • Usted puede querer hacerle una pregunta aparte de eso. Con Jackson, podría utilizar el módulo exterior (github.com/FasterXML/jackson-module-jsonSchema). Pero hay otros JSON de Esquemas generadores; yo no uso JSON Esquema de mí para nada así que no puedo comentar sobre cual es el mejor.
  2. 18

    Con Jackson 2.6 se puede utilizar, sin embargo usted tiene que hacer uso de JsonCreator

    Por ejemplo:

    public class MyClass {
    @JsonCreator
    public MyClass(@JsonProperty(value = "x", required = true) Integer x, @JsonProperty(value = "value_y", required = true) Integer y) {
    this.x = x;
    this.y = y;
    }
    private Integer x;
    private Integer y;
    }

    Si x o y no están presentes se producirá una excepción al intentar deserializar ella.

    • Sin embargo (para Jackson 2.6.5 en cualquier caso), si su JSON asigna x a «null», a continuación, Jackson estará feliz de aceptarlo como válido.
    • Creo que esa es la intención de comportamiento. El punto no es decir que ha de ser no nulo, solo que tiene que ser siempre. Si usted proporciona, pero usted proporciona null, que está siendo dado. Entonces usted tendría que hacer más de validación para asegurarse de que usted no tiene datos no válidos (por ejemplo, null)

Dejar respuesta

Please enter your comment!
Please enter your name here