Não sei ao certo mas nenhuma temporada aparece:
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
Não sei ao certo mas nenhuma temporada aparece:
Verifiquei digitação e acredito que o endpoint está sem erro de digitação.
O retorno do http://localhost:8080/series/2/temporadas/todas é um array vazio e o http://localhost:8080/series/2/temporadas/ da erro 404
Olá Guilherme!
Pelo que você descreveu e pela imagem que você compartilhou, parece que o seletor de temporadas não está exibindo as temporadas disponíveis. Vamos verificar alguns pontos que podem estar causando esse problema:
Verifique a URL no Controller:
Certifique-se de que a URL /temporadas/todas está corretamente configurada no seu SerieController.java. O código deve estar assim:
@GetMapping("/{id}/temporadas/todas")
public List<EpisodioDTO> obterTodasTemporadas(@PathVariable Long id){
return servico.obterTodasTemporadas(id);
}
Verifique o método no Service:
Certifique-se de que o método obterTodasTemporadas no SerieService está implementado corretamente e que ele está retornando os episódios. O código deve estar assim:
public List<EpisodioDTO> obterTodasTemporadas(Long id) {
Optional<Serie> serie = repositorio.findById(id);
if (serie.isPresent()) {
Serie s = serie.get();
return s.getEpisodios().stream()
.map(e -> new EpisodioDTO(e.getTemporada(), e.getNumeroEpisodio(), e.getTitulo()))
.collect(Collectors.toList());
}
return null;
}
Verifique o Front-end:
Certifique-se de que o front-end está fazendo a requisição correta para a URL /temporadas/todas. Você pode verificar isso no console do navegador (pressionando F12 e indo para a aba "Network") para ver se a requisição está sendo feita e se está retornando os dados esperados.
Verifique o DTO:
Certifique-se de que o EpisodioDTO está corretamente definido:
public record EpisodioDTO(Integer temporada, Integer numeroEpisodio, String titulo) {
}
Verifique o JavaScript: Certifique-se de que o JavaScript no front-end está tratando a resposta corretamente e populando o seletor de temporadas. Algo como:
fetch('/series/temporadas/todas')
.then(response => response.json())
.then(data => {
const seletor = document.getElementById('seletor-temporada');
data.forEach(temporada => {
const option = document.createElement('option');
option.value = temporada.temporada;
option.text = `Temporada ${temporada.temporada}`;
seletor.appendChild(option);
});
});
Espero que essas dicas ajudem a resolver o problema. Verifique cada um desses pontos e veja se alguma coisa está faltando ou configurada incorretamente.
Espero ter ajudado e bons estudos!
Olá!
Eu sei que provavelmente o erro está na minha cara mas não consigo enxergar kkkkkkkkk, minhas classes e metodos estão assim (https://github.com/guimaraesguii/Screen-Match/tree/fix-erro-404):
Controller:
@GetMapping("/{id}/temporadas/todas")
public List<EpisodioDTO> obterTodasTemporadas(@PathVariable Long id){
return service.obterTodasTemporadas(id);
}
Service:
public List<EpisodioDTO> obterTodasTemporadas(Long id) {
Optional<Serie> serie = repositorio.findById(id);
if (serie.isPresent()) {
Serie s = serie.get();
return s.getEpisodios().stream()
.map(e -> new EpisodioDTO(e.getTemporada(), e.getNumeroEpisodio(), e.getTitulo()))
.collect(Collectors.toList());
}
return null;
}
DTO:
public record EpisodioDTO(Integer temporada,
Integer numeroEpisodio,
String titulo) {
}
JavaScript:
getDados(`/series/${serieId}/temporadas/todas`)
.then(data => {
const temporadasUnicas = [...new Set(data.map(temporada => temporada.temporada))];
listaTemporadas.innerHTML = ''; // Limpa as opções existentes
const optionDefault = document.createElement('option');
optionDefault.value = '';
optionDefault.textContent = 'Selecione a temporada'
listaTemporadas.appendChild(optionDefault);
temporadasUnicas.forEach(temporada => {
const option = document.createElement('option');
option.value = temporada;
option.textContent = temporada;
listaTemporadas.appendChild(option);
});