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

Erro ao usar DTO

  • Professor estou fazendo o curso só que esta apresentando um erro, quando uso este método abaixo

  • método

    public static List converter(List topicos) {

      return topicos.stream()
               .map(TopicoDto::new)
                .collect(Collectors.toList());

    }

}

poderia me ajudar?

7 respostas

Olá Ricardo, tudo bem com você?

Você poderia deixar o acesso ao documento livre para que possa dar uma olhada no problema? Ou postar aqui da mesma forma a sua classe TopicoDto para observar o construtor?

Outra coisa, qual erro que está apresentando? Você pode colar a stack do erro para entender um pouco melhor!

Estou Aguardando :)

Abraços e Bons Estudos!

Ricardo,

Verifique também se você importou a classe List do pacote correto.

O pacote deve ser: java.util.List.

Professor , os importes são estes abaixo.

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

``
o código é este abaixo que esta dando problema
``

public static List<TopicoDto> converter(List<Topico> topicos) {

    return topicos.stream().map(TopicoDto::new).collect(Collectors.toList());
    }
}
na Classe controller, esta correta. 

@RestController
public class controllerTopico {

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

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

quando vou no browser apresenta este erro abaixo:

Quando escuto no Browse esta apresentando este error, poderia me ajudar?
Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.
Wed Jul 15 14:54:32 BRT 2020
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 (TopicoDto::new) The type TopicoDto does not define TopicoDto(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 (TopicoDto::new)
    The type TopicoDto does not define TopicoDto(Topico) that is applicable here

O problema é na sua classe TopicoDto.

Parece que ela não tem o construtor:

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

Professor conforme a mensagem acima, estou mandando o código

o construtor esta abaixo professor.

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 dataCricao;

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

    public Long getId() {
        return id;
    }

    public String getTitulo() {
        return titulo;
    }

    public String getMensagem() {
        return mensagem;
    }

    public LocalDateTime getDataCricao() {
        return dataCricao;
    }

    public static List<TopicoDto> converter(List<Topico> topicos) {

        return topicos.stream().map(TopicoDto::new).collect(Collectors.toList());
    }
solução!

Olá Ricardo, o problema está aqui:

public void TopitoDto(Topico topico) {

Quando adicionamos o void o Java para de entender algo como um Construtor e sim como um método, por isso o erro de não haver um construtor definido, mude para:

public TopitoDto(Topico topico) {

Abraços!

  • Geonavi Granieri,

    muito obrigado agora deu certo, erra isto mesmo que você. O java estava vendo com método não como contructor, obrigado.

Agora ficou assim : 

    public TopicoDto (Topico topico) {
        this.id = topico.getId();
        this.titulo = topico.getTitulo();
        this.mensagem = topico.getMensagem();
        this.dataCricao = topico.getDataCriacao();
    }
[
{
id: null,
titulo: "Dúvida",
mensagem: "Dúvida com Spring",
dataCricao: "2020-07-16T12:16:24.373"
},
{
id: null,
titulo: "Dúvida",
mensagem: "Dúvida com Spring",
dataCricao: "2020-07-16T12:16:24.373"
}
]