Jersey2.0 + Glassfish 4: Problemas ao exibir json

2 respostas
E

Criei um entidade de consulta, onde existem dois atributos apenas, um para dizer a qt de registros e outro que é a lista com o retorno da consulta, segue o código da classe.

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class RetornoDeConsulta<ENT> {
	
	@XmlElement
	private final Integer qtdeTotalDeRegistros;
	
	@XmlElement
	private final List<ENT> lista;
	
	public RetornoDeConsulta(Integer qtdeTotalDeRegistros, List<ENT> lista) {
		this.qtdeTotalDeRegistros = qtdeTotalDeRegistros;
		this.lista = lista;
	}
	
	public RetornoDeConsulta(List<ENT> lista){
		if(lista == null){
			this.lista = new ArrayList<>();
		}else{
			this.lista = lista;
		}
		this.qtdeTotalDeRegistros = lista.size();
	}
	
	
	
	public RetornoDeConsulta(){
		this.qtdeTotalDeRegistros = null;
		this.lista = null;
	}

	public Integer getQtdeTotalDeRegistros(){
		return qtdeTotalDeRegistros;
	}

	public List<ENT> getLista() {
		return lista;
	}
	
}

O meu recurso esta assim

@Path("/consulta")
@Override
@GET
@Produces(RestConstants.APPLICATION_JSON_UTF8)
public RetornoDeConsulta getAll() {
    List<Usuario> lista = service.getAll();
    RetornoDeConsulta<Usuario> retorno = new RetornoDeConsulta<>(lista.size(), lista);
    return retorno;
}

Quando acesso o recurso para exibir o resultado da consulta o json esta apresentando assim.

{
qtdeTotalDeRegistros: 2,
lista: [
"br.com.pedrominga.model.Usuario@31a602e1",
"br.com.pedrominga.model.Usuario@4de0c784"
]
}

A lista não esta sendo exibida no formato de um json, alguém tem alguma ideia.

Obrigado

2 Respostas

adriano_si

A lista está sendo exibida no formato certo. Só que seu RetornoDeConsulta é do tipo Usuario e o nome totalmente qualificado da seu Objeto Usuário é esse nome estranho:

"br.com.pedrominga.model.Usuario@31a602e1"

Isso é o retorno do método toString quando você não o sobrescreve.

Talvez, sua entidade Usuário também tenha que estar anotada com @XmlRootElement pra que ela também seja formatada da forma que você quer.

Teste aí e nos dê o retorno.

E

Obrigado Adriano pela ajuda, mas a classe usuário esta anotada com @XmlRootElement

Segue a classe Usuário.

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
@Entity
@Table(name="usuario")
@NamedQueries({
    @NamedQuery(name="Usuario.getAll", query = "select u from Usuario u order by u.login"),
    @NamedQuery(name="Usuario.getById", query = "select u from Usuario u where u.id = :id order by u.login")
})
public class Usuario implements Serializable {
        
    @Id
    @XmlElement
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;
    
    @NotEmpty
    @XmlElement
    @Length(max = 50)
    private String login;
    
    @NotEmpty
    @XmlElement
    @Length(max = 256)
    private String senha;
    
    @XmlElement
    @JoinColumn(name = "tipo_usuario_id", referencedColumnName = "id")
    @ManyToOne
    private TipoUsuario tipoUsuario;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getLogin() {
        return login;
    }

    public void setLogin(String login) {
        this.login = login;
    }

    public String getSenha() {
        return senha;
    }

    public void setSenha(String senha) {
        this.senha = senha;
    }

    public TipoUsuario getTipoUsuario() {
        return tipoUsuario;
    }

    public void setTipoUsuario(TipoUsuario tipoUsuario) {
        this.tipoUsuario = tipoUsuario;
    }

    
  
    
    

    
    
}
Criado 21 de outubro de 2014
Ultima resposta 22 de out. de 2014
Respostas 2
Participantes 2