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é @JsonIgnore
la 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 @JsonIgnore
solicitar 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
@JsonIgnore
a la propiedad - Agregar
@JsonIgnore
solo el método getter
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
Para lograr esto, todo lo que necesitamos son dos anotaciones:
@JsonIgnore
@JsonProperty
Úselo
@JsonIgnore
en el miembro de la clase y su captador, y@JsonProperty
en 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.JsonProperty
anotació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.JsonIgnore
lugar 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=true
en 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
foo
ybar
se rellenan en el objeto, pero solo foo se escribe en un cuerpo de respuesta.fuente