3
respostas

O meu projeto está gerando valor "undefined"

Vou mostrar o código aqui. Quando clico em um filme gera um valor "undefined" em todos os campos.

No inspecionar do navegador mostra isso: "getDados.js:5

    GET http://localhost:8080/series/undefined 400 (Bad Request)

getDados @ getDados.js:5 carregarInfoSerie @ series.js:72 (anônimo) @ series.js:95 undefined:1

    GET http://127.0.0.1:5501/undefined 404 (Not Found)

[NOVO] Explique os erros do Console usando o Copilot no Edge: clique em

     para explicar um erro.
    Saiba mais
    Não mostrar novamente

getDados.js:5

    GET http://localhost:8080/series/undefined/temporadas/todas 404 (Not Found)

getDados @ getDados.js:5 carregarTemporadas @ series.js:11 (anônimo) @ series.js:96 series.js:34 Erro ao obter temporadas: TypeError: data.map is not a function at series.js:13:55"

Os códigos das classes estão assim: `package br.com.alura.screenmatch.service;

import br.com.alura.screenmatch.dto.SerieDTO; import br.com.alura.screenmatch.model.Serie; import br.com.alura.screenmatch.repository.SerieRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;

import java.util.List; import java.util.Optional; import java.util.stream.Collectors;

@Service public class SerieService {

@Autowired
private SerieRepository repositorio;

public List<SerieDTO> obterTodasAsSeries() {
    return converteDados(repositorio.findAll());
}

public List<SerieDTO> obterTop5Series() {
    return converteDados(repositorio.findTop5ByOrderByAvaliacaoDesc());
}

private List<SerieDTO> converteDados(List<Serie> series) {
    return series.stream()
            .map(s -> new SerieDTO(s.getId(), s.getTitulo(), s.getTotalTemporadas(), s.getAvaliacao(), s.getGenero(), s.getAtores(), s.getPoster(), s.getSinopse()))
            .collect(Collectors.toList());
}

public List<SerieDTO> obterLancamentos() {
    return converteDados(repositorio.findTop5ByOrderByEpisodiosDataLancamentoDesc());
}

public SerieDTO obterPorId(Long id) {
    Optional<Serie> serie = repositorio.findById(id);

    if(serie.isPresent()) {
        Serie s = serie.get();
        return new SerieDTO(s.getId(), s.getTitulo(), s.getTotalTemporadas(), s.getAvaliacao(), s.getGenero(), s.getAtores(), s.getPoster(), s.getSinopse());
    }
    return null;
}

} `

package br.com.alura.screenmatch.repository;

import br.com.alura.screenmatch.model.Categoria;
import br.com.alura.screenmatch.model.Episodio;
import br.com.alura.screenmatch.model.Serie;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;

import java.util.List;
import java.util.Optional;

public interface SerieRepository extends JpaRepository<Serie, Long> {
    Optional<Serie> findByTituloContainingIgnoreCase(String nomeSerie);

    List<Serie> findByAtoresContainingIgnoreCaseAndAvaliacaoGreaterThanEqual(String nomeAtor, Double avaliacao);

    List<Serie> findTop5ByOrderByAvaliacaoDesc();

    List<Serie> findByGenero(Categoria categoria);

    List<Serie> findByTotalTemporadasLessThanEqualAndAvaliacaoGreaterThanEqual(int totalTemporadas, double avaliacao);

    @Query("select s from Serie s WHERE s.totalTemporadas <= :totalTemporadas AND s.avaliacao >= :avaliacao")
    List<Serie> seriesPorTemporadaEAvaliacao(int totalTemporadas, double avaliacao);

    @Query("select e from Serie s JOIN s.episodios e WHERE e.titulo ILIKE %:trechoEpisodio%")
    List<Episodio> episodiosPorTrecho(String trechoEpisodio);

    @Query("select e from Serie s JOIN s.episodios e WHERE s = :serie ORDER BY e.avaliacao DESC LIMIT 5")
    List<Episodio> topEpisodiosPorSerie(Serie serie);

    @Query("select e from Serie s JOIN s.episodios e WHERE s = :serie AND YEAR(e.dataLancamento) >= :anoLancamento")
    List<Episodio> episodiosPorSerieEAno(Serie serie, int anoLancamento);

    List<Serie> findTop5ByOrderByEpisodiosDataLancamentoDesc();
}

3 respostas
package br.com.alura.screenmatch.controller;

import br.com.alura.screenmatch.dto.SerieDTO;
import br.com.alura.screenmatch.service.SerieService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
@RequestMapping("/series")
public class SerieController {

    @Autowired
    private SerieService servico;

    @GetMapping()
    public List<SerieDTO> obterSeries() {
        return servico.obterTodasAsSeries();
    }

    @GetMapping("/top5")
    public List<SerieDTO> obterTop5Series() {
        return servico.obterTop5Series();
    }

    @GetMapping("/lancamentos")
    public List<SerieDTO> obterLancamentos() {
        return servico.obterLancamentos();
    }

    @GetMapping("/{id}")
    public SerieDTO obterPorId(@PathVariable Long id) {
        return servico.obterPorId(id);
    }
}

E o console do Intellij exibe esse erro: "2024-11-29T19:14:20.997-03:00 WARN 10736 --- [screenmatch] [nio-8080-exec-9] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: Method parameter 'id': Failed to convert value of type 'java.lang.String' to required type 'java.lang.Long'; For input string: "undefined"] "

Já resolvi.

Na classe public record SerieDTO(Long id, String titulo, Integer totalTemporadas, Double avaliacao, Categoria genero, String atores, String poster, String sinopse) { }

O parâmetro "id" estava escrito "Id", com "i" maiúsculo. rsrs

Oi Luiz! Tudo bem?

Que bom que conseguiu resolver! Na programação é assim mesmo, a gente troca uma letrinha e depois se assusta com o erro hehehe

Qualquer dúvida, estou à disposição.

Abraços e bons estudos!