Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Como forçar para não mostrar o campo/atributo na resposta XML?

A minha dúvida aparentemente é simples, mas não encontrei tópico na internet que diga como proceder: tenho um web service REST e não quero que aparece na resposta XML determinado campo da classe. Como fazer? Para forçar aparecer, é só colocar @XmlElement ou @XmlAttribute. Beleza. Teoricamente, para não aparecer, seria só não colocar nada, mas não é isso que está acontecendo. Mesmo sem anotação nenhuma, está aparecendo o campo no xml. Como forçar para não mostrar no xml? Obrigado.

3 respostas
solução!

Boa noite, Rogério! Como vai?

Vc pode utilizar a anotação @XmlTransient no método get do atributo que vc não quer que apareça no XML se o acesso do JAX-B à sua classe for o de membros públicos que é a forma de acesso padrão. Mas, caso vc esteja utilizando na sua classe a anotação @XmlAccessorType(XmlAccessType.FIELD), então pode anotar diretamente o seu atributo com o @XmlTransient.

Teste aí, veja se tudo funciona como esperado e depois diz aqui se funcionou ou não que eu possa continuar a te ajudar caso seja necessário.

Grande abraço!

Bom dia, Gabriel..blz? então, acabei de testar e foi bem rápido: colocando apenas o @XmlTransient no atributo, não funcionou, mas colocando apenas no get do atributo funcionou e deixando os dois, tanto o atributo quanto o seu get, com @XmlTransient, tambem funcionou. Grande Abraço. Obrigado.

Opa, Rogério!

Isso aconteceu pq por padrão o JAX-B funciona no modo XmlAccessType.PUBLIC_MEMBER, acessando somente os membros públicos da sua classe (por questões de encapsulamento, como os atributos da classe estarão privadaso, normalmente serão acessados os getters e setters). Por isso que vc teve que anotar o get que é público. Ou seja, quando vc anotou atributo e método funcionou pq o método estava anotado! A anotação do atributo não influênciou em nada.

Para mudar esse comportamento e passar a poder anotar o atributo, vc teria que anotar a sua classe com @XmlAccessorType(XmlAccessType.FIELD).

Mas, como tudo já deve estar configurado para que o acesso seja feito através dos membros públicos, essa informação fica só como um extra pra vc!

Grande abraço!