Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Tarefas Assíncronas com Callable - Limpando carrinho após o pagamento

Saudações, Ao finalizar um pagamento percebi que o carrinho de compra continua cheio, mesmo com o sucesso do pagamento. Gostaria de criar um tarefa para esvaziar o carrinho de compra, porém como ainda não trabalhei com a Callable, não sei exatamente como fazer, minha ideia é antes de retornar o ModelAndView, chama o metodo de esvaziar carrinho, conforma código abaixo:


@Controller
@RequestMapping("/pagamento")
public class PagamentoController {

    @Autowired //preenche um objeto
    CarrinhoCompras carrinho;

    @Autowired
    RestTemplate rest;

        @RequestMapping(method=RequestMethod.POST)
        public Callable<ModelAndView> finalizar(RedirectAttributes model){
            //Classe Callable permite fazer tarefas assincronas com o servidor
            return () -> {
                try{
                    //utilizando classe RestTemplate para consumir servico
                    //o metodo postForObject necessita de tres params, 1-> url do servico, 2-> mensagem em JSON, 3 -> uma classe de retorno
                    String url = "http://book-payment.herokuapp.com/payment";        
                    //a requisicao eh enviada por meio da classe DadosPagamento que automaticamente eh transformada em JSON pela biblioteca jackson
                    DadosPagamento request = new DadosPagamento(carrinho.getTotal());
                    //a resposta eh retornada via classe String
                    String response = rest.postForObject(url, request, String.class);                         
                    model.addFlashAttribute("mensagem", response);    

                    //codigo aqui para limpar o carrinho
                    carrinho.esvaziar();

                    return new ModelAndView("redirect:/produtos");
                }catch (HttpClientErrorException e){
                    e.printStackTrace();
                    model.addFlashAttribute("mensagem", "Não foi possível realizar Pagamento");
                    return new ModelAndView("redirect:/produtos");
                }                
            };            
        }
}

Alguma sugestão? Obrigado!

1 resposta
solução!

Opa, você pode criar um método no carrinho que limpa ele. Uma outra sugestão é receber como argumento do método a HttpSession e limpar ela.