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

Erro ao solicitar a lista de topicos a API

Após seguir passo a passo a aula de DTO, estou tomando uma NullPointerException.

Caused by: java.lang.NullPointerException at br.com.diego.forum.controller.dto.TopicoDTO.getId(TopicoDTO.java:24)

Minha classe TopicoDTO

package br.com.diego.forum.controller.dto;

import java.time.LocalDateTime; import java.util.List; import java.util.stream.Collectors;

import br.com.diego.forum.model.Topico;

public class TopicoDTO {

private Long id; 
private String titulo; 
private String mensagem; 
private LocalDateTime dataCriacao;

public TopicoDTO(Topico topico) {
    this.id = topico.getId();
    this.titulo = topico.getTitulo();
    this.mensagem = topico.getMensagem();
    this.dataCriacao = topico.getDataCriacao();
}

public long getId() {
    return id;  //linha 24
}
public String getTitulo() {
    return titulo;
}
public String getMensagem() {
    return mensagem;
}
public LocalDateTime getDataCriacao() {
    return dataCriacao;
}

public static List<TopicoDTO> converter(List<Topico> topicos) {
    return topicos.stream().map(TopicoDTO::new).collect(Collectors.toList());
} 

}

Não sei como resolver isso. Grato pela atenção.

2 respostas

There was an unexpected error (type=Internal Server Error, status=500). Could not write JSON: (was java.lang.NullPointerException); nested exception is com.fasterxml.jackson.databind.JsonMappingException: (was java.lang.NullPointerException) (through reference chain: java.util.ArrayList[0]->br.com.diego.forum.controller.dto.TopicoDTO["id"])

A minha classe Topico está assim:

package br.com.diego.forum.model;

import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List;

public class Topico {

private Long id;
private String titulo;
private String mensagem;
private LocalDateTime dataCriacao = LocalDateTime.now();
private StatusTopico status = StatusTopico.NAO_RESPONDIDO;
private Usuario autor;
private Curso curso;
private List<Resposta> respostas = new ArrayList<>();

public Topico(String titulo, String mensagem, Curso curso) {
    this.titulo = titulo;
    this.mensagem = mensagem;
    this.curso = curso;
}

@Override
public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + ((id == null) ? 0 : id.hashCode());
    return result;
}

@Override
public boolean equals(Object obj) {
    if (this == obj)
        return true;
    if (obj == null)
        return false;
    if (getClass() != obj.getClass())
        return false;
    Topico other = (Topico) obj;
    if (id == null) {
        if (other.id != null)
            return false;
    } else if (!id.equals(other.id))
        return false;
    return true;
}

public Long getId() {
    return id;
}

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

public String getTitulo() {
    return titulo;
}

public void setTitulo(String titulo) {
    this.titulo = titulo;
}

public String getMensagem() {
    return mensagem;
}

public void setMensagem(String mensagem) {
    this.mensagem = mensagem;
}

public LocalDateTime getDataCriacao() {
    return dataCriacao;
}

public void setDataCriacao(LocalDateTime dataCriacao) {
    this.dataCriacao = dataCriacao;
}

public StatusTopico getStatus() {
    return status;
}

public void setStatus(StatusTopico status) {
    this.status = status;
}

public Usuario getAutor() {
    return autor;
}

public void setAutor(Usuario autor) {
    this.autor = autor;
}

public Curso getCurso() {
    return curso;
}

public void setCurso(Curso curso) {
    this.curso = curso;
}

public List<Resposta> getRespostas() {
    return respostas;
}

public void setRespostas(List<Resposta> respostas) {
    this.respostas = respostas;
}

}

solução!

Oi Diego,

Provavelmente é porque o retorno do seu método getId() está o long primitivo, e como o id vem null, dá erro ao converter para o tipo primitivo.

Altere seu método getId da classe TopicoDto:

public Long getId() {
    return id;
}

Veja se resolve.