Eu tenho uma classe de entidade com um campo de senha:
class User {
private String password;
//setter, getter..
}
Quero que este campo seja ignorado durante a serialização. Mas ainda deve ser capaz de desserializar. Isso é necessário para que o cliente possa me enviar uma nova senha, mas não consiga ler a atual.
Como faço isso com Jackson?
@JsonIgnore
no getter, mas@JsonProperty
no setter, caso em que as coisas não são serializadas, mas podem ser desserializadas.Respostas:
Você pode marcá-lo como
@JsonIgnore
.Com 1.9, você pode adicionar
@JsonIgnore
para getter,@JsonProperty
para setter, para desserializar, mas não serializar.fonte
@JsonIgnore
para getter,@JsonProperty
para setter, para desserializar, mas não serializar.transient
(como emprivate transient String password;
), mas os campos transitórios com getters públicos são ignorados, a menos que o MapperFeature.PROPAGATE_TRANSIENT_MARKER esteja ativado.Ilustrando o que o StaxMan afirmou, isso funciona para mim
fonte
@JsonIgnore
não é necessário em campo, ao que parece.A maneira mais fácil é anotar seus getters e setters.
Aqui está o exemplo original modificado para excluir a senha de texto sem formatação, mas anote um novo método que apenas retorna o campo da senha como texto criptografado.
fonte
A partir do Jackson 2.6 , uma propriedade pode ser marcada como somente leitura ou gravação. É mais simples do que invadir as anotações nos dois acessadores e mantém todas as informações em um só lugar:
fonte
Além de
@JsonIgnore
, existem algumas outras possibilidades:@JsonIgnoreProperties
na aula pode ser útilfonte
transient
é a solução para mim. obrigado! é nativo para Java e evita que você adicione outra anotação específica da estrutura.fonte
Deve-se perguntar por que você deseja um método público getter para a senha. O Hibernate, ou qualquer outra estrutura ORM, funcionará com um método getter privado. Para verificar se a senha está correta, você pode usar
fonte
Jackson tem uma classe chamada SimpleBeanPropertyFilter que ajuda a filtrar campos durante a serialização e desserialização; não globalmente. Eu acho que é isso que você queria.
Então no seu código:
Isso impedirá que o
password
campo seja serializado. Além disso, você poderá desserializar ospassword
campos como estão. Apenas verifique se não há filtros aplicados ao objeto ObjectMapper.fonte
definir variável como
@JsonIgnore
Isso permite que a variável seja ignorada pelo json serializer
fonte