Eu entendo, mas você usando o GSON vai ter q escolher que lado você quer.
Para fazer isso, você tem que fazer algo deste tipo (peguei de um projeto meu).
É fácil achar na documentação do GSON como fazer isso.
Você precisa ter a "Estratégia de exclusão" e uma anotação para indicar quais campos serão excluídos.
import com.google.gson.ExclusionStrategy;
import com.google.gson.FieldAttributes;
/**
* Estratégia de exclusão de campos para o Gson usando a anotação @ExcluirJSON.
*
* @author David Buzatto
*/
public class EstrategiaExclusaoJSON implements ExclusionStrategy {
@Override
public boolean shouldSkipField( FieldAttributes fa ) {
// verifica se tem a anotação da exclusão do JSON
return fa.getAnnotation( ExcluirJSON.class ) != null;
}
@Override
public boolean shouldSkipClass( Class<?> type ) {
// aceita qualquer classe
return false;
}
}
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* Anotação para excluir campo do JSON gerado pelo Gson.
*
* @author David Buzatto
*/
@Retention( RetentionPolicy.RUNTIME )
@Target( ElementType.FIELD )
public @interface ExcluirJSON {
// apenas marcação de campo
}
Ai, o campo que você quer remover da serialização, você anota com o @ExcluirJSON.
Exemplo:
public class Foo {
@ExcluirJSON // vai remover o bar dos foos
private Bar bar;
}
public class Bar {
private List<Foo> foos;
}
Por fim, para serializar, crie o GSON assim:
Gson gson = new GsonBuilder().setExclusionStrategies( new EstrategiaExclusaoJSON() ).create();
Assim, você pode criar mais de uma estratégia e criar o serializador com o que você precisa.