Tengo un objeto de usuario que se envía desde y hacia el servidor. Cuando envío el objeto de usuario, no quiero enviar la contraseña cifrada al cliente. Por lo tanto, agregué @JsonIgnorela propiedad de contraseña, pero esto también impide que se deserialice en la contraseña, lo que dificulta el registro de usuarios cuando no tienen una contraseña.
¿Cómo puedo @JsonIgnoresolicitar la serialización y no la deserialización? Estoy usando Spring JSONView, así que no tengo mucho control sobre el ObjectMapper.
Cosas que he probado:
- Agregar
@JsonIgnorea la propiedad - Agregar
@JsonIgnoresolo el método getter

@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)Para lograr esto, todo lo que necesitamos son dos anotaciones:
@JsonIgnore@JsonPropertyÚselo
@JsonIgnoreen el miembro de la clase y su captador, y@JsonPropertyen su establecedor. Una ilustración de muestra ayudaría a hacer esto:fuente
Desde la versión 2.6: una forma más intuitiva es usar la
com.fasterxml.jackson.annotation.JsonPropertyanotación en el campo:Incluso si existe un captador, el valor del campo se excluye de la serialización.
JavaDoc dice:
En caso de que lo necesite al revés, simplemente utilícelo
Access.READ_ONLY.fuente
En mi caso, tengo Jackson automáticamente (des) serializando objetos que devuelvo de un controlador Spring MVC (estoy usando @RestController con Spring 4.1.6). Tuve que usar en
com.fasterxml.jackson.annotation.JsonIgnorelugar deorg.codehaus.jackson.annotate.JsonIgnore, de lo contrario, simplemente no hizo nada.fuente
fuente
Otra forma fácil de manejar esto es usar el argumento
allowSetters=trueen la anotación. Esto permitirá que la contraseña se deserialice en su dto, pero no la serializará en un cuerpo de respuesta que use el objeto contiene.ejemplo:
Ambos
fooybarse rellenan en el objeto, pero solo foo se escribe en un cuerpo de respuesta.fuente