Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Usando DTO

Não consegui fazer funcionar, está ocorrendo o erro:

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.mateusalxd.forum.controller.dto.TopicoDTO["id"])
org.springframework.http.converter.HttpMessageNotWritableException: 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.mateusalxd.forum.controller.dto.TopicoDTO["id"])
    .....

Meu DTO:

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

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

import br.com.mateusalxd.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() == null ? 0 : topico.getId();
        this.id = topico.getId();
        this.titulo = topico.getTitulo();
        this.mensagem = topico.getMensagem();
        this.dataCriacao = topico.getDataCriacao();
    }

// Getters omitidos

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

}

Meu controller:

package br.com.mateusalxd.forum.controller;

import java.util.Arrays;
import java.util.List;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import br.com.mateusalxd.forum.controller.dto.TopicoDTO;
import br.com.mateusalxd.forum.model.Curso;
import br.com.mateusalxd.forum.model.Topico;

@RestController
public class TopicosController {

    //@RequestMapping(method = RequestMethod.GET)
    @RequestMapping("/topicos")
    public List<TopicoDTO> lista() {
        Topico topico = new Topico("Uma duvida", "Por que é assim?", new Curso("Spring Boot", "Programação"));
        return TopicoDTO.converter(Arrays.asList(topico, topico, topico));
    }

}

A versão do Spring tentei com 2.1.4.RELEASE e 2.1.6.RELEASE, só consegui fazer funcionar com o projeto que está na aula seguinte ou colocando uma tratativa no TopicoDTO.id quando vir nulo colocar 0 por exemplo.

1 resposta
solução!

Consegui achar o problema, um erro muito sutil, o getId estava retornando um long ao invés de Long.