
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.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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():
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create(); |