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!