Eu tenho um objeto de usuário que é enviado para e do servidor. Quando envio o objeto de usuário, não quero enviar a senha com hash para o cliente. Então, adicionei @JsonIgnore
a propriedade da senha, mas isso também impede que a desserialização seja feita na senha, o que dificulta a inscrição de usuários quando eles não têm uma senha.
Como posso @JsonIgnore
aplicar apenas à serialização e não à desserialização? Estou usando o Spring JSONView, então não tenho muito controle sobre o ObjectMapper
.
Coisas que tentei:
- Adicionar
@JsonIgnore
à propriedade - Adicione
@JsonIgnore
apenas o método getter
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
Para conseguir isso, tudo o que precisamos é de duas anotações:
@JsonIgnore
@JsonProperty
Use
@JsonIgnore
no aluno e@JsonProperty
em quem recebe e em quem faz o preparo. Uma ilustração de exemplo ajudaria a fazer isso:fonte
Desde a versão 2.6: uma maneira mais intuitiva é usar a
com.fasterxml.jackson.annotation.JsonProperty
anotação no campo:Mesmo que exista um getter, o valor do campo é excluído da serialização.
O JavaDoc diz:
Caso você precise do contrário, basta usar
Access.READ_ONLY
.fonte
No meu caso, tenho Jackson (des) serializando automaticamente objetos que retorno de um controlador Spring MVC (estou usando o @RestController com o Spring 4.1.6). Eu tive que usar em
com.fasterxml.jackson.annotation.JsonIgnore
vez deorg.codehaus.jackson.annotate.JsonIgnore
, caso contrário, simplesmente não fez nada.fonte
fonte
Outra maneira fácil de lidar com isso é usar o argumento
allowSetters=true
na anotação. Isso permitirá que a senha seja desserializada no seu dto, mas não a serializará em um corpo de resposta que usa o objeto contém.exemplo:
Ambos
foo
ebar
são preenchidos no objeto, mas apenas foo é gravado em um corpo de resposta.fonte