Olá!
Eu tenho dois problemas. Um está resolvido, mas eu gostaria de entender o que está acontecendo e descobrir se há algum jeito melhor de resolvê-lo e o outro não consegui descobrir o que é.
Vamos ao resolvido primeiro. Em alguma parte do curso, não sei se ainda no primeiro ou agora no segundo, clicar em comprar o produto e mostrar a tela do carrinho quebrou. No começo, tudo estava funcionando perfeitamente, mas quando fui testar o "finalizar compra" agora no segundo curso, eu recebia NullPointerException ao tentar comprar. Fui olhando tudo, desde a jsp de detalhe até a jsp de itens do carrinho e parecia estar tudo em seu devido lugar. O erro me indicava que um de meus métodos da classe CarrinhoCompras estava retornando nulo. Foi então que eu fiz uns sysout dentro do método add do CarrinhoComprasController e descobri que o add estava funcionando, ou seja, meu Map de itens estava recebendo o item passado pelo detalhe.jsp e o método que estava quebrando também. Fui mais a fundo e então descobri onde estava o cerne do problema: o método getItens da classe CarrinhoCompras. Ele me retornava tanto o elemento adicionado quanto um valor nulo. E no meu entendimento, na hora que o valor nulo chegava no itens.jsp para ser processado, ele quebrava a página. Procurando meios de resolver, descobri isso:
public Collection<CarrinhoItem> getItens(){
carrinho.keySet().removeIf(Objects::isNull);
return carrinho.keySet();
}
Se eu jogo só o retorno, recebo um conjunto com valor nulo, mas adicionando a linha acima do retorno, eu limpo os valores nulos e a página carrega. Então a dúvida é: por que meu mapa está ficando com um valor nulo lá? Por que a página quebra com esse valor nulo, sendo que eu peço pra ela processar explicitamente o valor que foi passado na requisição? Tem algum meio mais elegante ou melhor de corrigir esse problema?
Ok, esse foi o primeiro. Agora ao segundo.
Não consigo finalizar a compra sem passar pela tela de login. Meu "/pagamentos/" já está com permitAll inclusive antes do instrutor adicionar nesse momento do curso. Esse eu realmente não consegui descobrir.
Os códigos que achei relevantes, coloquei no gist. Segue as páginas pra consulta:
Se precisarem de mais alguma coisa, só me dizer. Valeu!