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

Method Map

Estou com problemas seguindo o tutorial.

TopicosController.java

    @RequestMapping("/topicos")
    public List<TopicoDto> lista() {
        Topico topico = new Topico("Dúvida", "Dúvida com SpringBoot", new Curso("Spring", "Programação"));

        return TopicoDto.converter(Arrays.asList(topico, topico, topico));
    }

TopicoDto.java

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

    // getters 
    {...}

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

Podem me explicar do que se trata esse erro:

This application has no explicit mapping for /error, so you are seeing this as a fallback.

Wed Jul 07 16:37:11 GMT-03:00 2021
There was an unexpected error (type=Internal Server Error, status=500).
Unresolved compilation problems: The method map(Function<? super Topico,? extends R>) in the type Stream<Topico> is not applicable for the arguments (Topico::new) The type Topico does not define Topico(Topico) that is applicable here
java.lang.Error: Unresolved compilation problems: 
    The method map(Function<? super Topico,? extends R>) in the type Stream<Topico> is not applicable for the arguments (Topico::new)
    The type Topico does not define Topico(Topico) that is applicable here
3 respostas

Oi Glauco,

O problema e que voce nao criou um construtor na classe TopicoDto e sim um metodo:

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

Converta esse metodo para construtor que o problema deve resolver.

Oi Rodrigo eu havia criado sim, segue na integra

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

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

import br.com.alura.forum.modelo.Topico;

public class TopicoDto {

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

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

    public Long getId() {
        return id;
    }

    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(Topico::new).collect(Collectors.toList());
    }

}
solução!

Oi Glacuo,

Logo abaixo dos atributos voce criou foi um metodo e nao um construtor(construtor nao tem retorno e seu metodo tem void como retorno)