Possível configurar o Jackson-Json Mapper para excluir propriedades com base em qual objeto está serializando?
Pergunta
Digamos que eu tenha objetos como uma empresa com uma lista de objetos de endereço e um pedido que tenha um negócio.
É possível configurar para que, quando a ordem seja serializada, exclua a lista de endereços do objeto de negócios e, quando a empresa é serializada, inclui a lista?
Estou usando o Ajax para extrair dados para uma RIA e, ao trabalhar com o pedido, não me importo com os dados do endereço, mas ao lidar com os negócios, quero a lista.
Também estou usando o Hibernate para persistência, então isso é realmente uma eficiência e otimização de desempenho.
Solução
Se eu entendo a pergunta corretamente, sim, eu acho Visualizações JSON pois Jackson permitiria isso. Você basicamente criaria duas visualizações diferentes (perfis) para o mesmo tipo e escolheria qual usar para serializar.
Outras dicas
Você poderia usar o Anotação Jsonignore para ignorar o Endereço Liste em serialização e desligar o uso de anotações no ObjectMapper's SerializationConfig ao serializar a O negócio. Obviamente, isso significa que outras anotações que você pode usar também são ignoradas. Não é perfeito, mas você pode encontrar uma solução melhor analisando isso, espero que ajude (obviamente).
ObjectMapper mapper = new ObjectMapper();
mapper.getSerializationConfig().disable(Feature.USE_ANNOTATIONS);
Sim, você pode fazer isso. Tudo o que você precisa é declarar a lista de endereço como propriedade transitória em seu objeto de negócios.
Em seguida, adicione o seguinte código ao seu JSONCONCIG:
jsonConfig.setIgnoreTransientFields(true);
@JsonIgnore
é usado para ignorar as propriedades que você não deseja converter para o JSON.
public class UserDocument {
private long id;
private String documentUrl;
@JsonIgnore
private byte documentType;
//traditional getters and setters
}
Saída: isso converterá as propriedades Eu iria e documenturl mas não converterá a propriedade tipo de documento.
{
"id": 5,
"document_url": "/0/301115124948.jpg"
}