Gson – Impedindo que um atributo seja serializado ou deserializado

by Cinta Vidal Agullo / from beautifuldecay.com

ExclusionStrategy

Um dos caminhos para impedir que um atributo seja serializado é através da implementação de um ExclusionStrategy, onde através da reescrita do método shouldSkipField() informaremos se queremos ou não que um atributo de uma classe sendo serializada seja juntamente serializado, e o método shouldSkipClass(), onde o enfoque passa a ser a classe, se desejamos ou não que uma classe seja serializada.


class MeuGsonExclusionStrategy implements ExclusionStrategy {
@Override
public boolean shouldSkipField(FieldAttributes fieldAttributes) {
return fieldAttributes.getName().equals("meuatributo");
}
@Override
public boolean shouldSkipClass(Class<?> aClass) {
return aClass.getName().equals("com.example.MinhaClasse");
}
}

Após isso, basta na criação de nossa instância de Gson através do GsonBuilder invocarmos o método addSerializationExclusionStrategy():


Gson gson = new GsonBuilder().addSerializationExclusionStrategy(new MeuGsonExclusionStrategy()).create();

Repare que também existe o método addDeserializationExclusionStrategy(), que possui o mesmo objeto mas para o processo de deserialização.

excludeFieldsWithModifiers

Um segundo método para impedirmos que um atributo seja serializado ou deserializado é o excludeFieldsWithModifiers() que espera como parâmetro um constante de java.lang.reflect.Modifier. Esse método informa quais campos queremos impedir informando seus modificadores. Por exemplo, caso não seja desejado que todos os atributos final sejam serializados ou deserializados, fazemos assim:


Gson gson = new GsonBuilder().excludeFieldsWithModifiers(java.lang.reflect.Modifier.FINAL).create();

excludeFieldsWithoutExposeAnnotation

Um terceiro método a ser comentado para essa função é o excludeFieldsWithoutExposeAnnotation(), que impede que todos os atributos que não possuam a anotação @Exposed seja serializado ou deserializado. Ou seja, todos os campos que queremos que seja serializado ou deserializado deve ser anotado com @Exposed. Segue o exemplo de uso abaixo:


Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s