2
respostas

Como limpar objeto carrinhoCompra após finalizar

Ola, Como que eu recupero o objeto carrinhoCompras no método finalizar(...) da classe PagamentoController ? devo coloca-lo na assinatura do método finalizar(...) ? eu queria pegar esse objeto de sessão para poder limpa-lo após a finalização da compra.

meu método finalizar esta assim:

@RequestMapping(value = "/finalizar", method = RequestMethod.POST)
    public Callable<ModelAndView> finalizar(@AuthenticationPrincipal final Usuario usuario, final RedirectAttributes model) {
        Callable<ModelAndView> call = new Callable<ModelAndView>() {
            @Override
            public ModelAndView call() throws Exception {
                try {
                    String uri = "http://book-payment.herokuapp.com/payment";
                    String response = restTemplate.postForObject(uri, new DadosPagamento(carrinho.getTotal()),
                            String.class);
                    model.addFlashAttribute("sucesso", response);
                    // envia email para o usuário
                    enviaEmailCompraProduto(usuario);

                    return new ModelAndView("redirect:/produtos");
2 respostas

Oi Marcos,

Você pode criar um atributo carrinho e injetá-lo com a anotação @Autowired. O próprio Spring consegue injetar para você.

Abraço!

Oi Joviane,

Eu injetei a classe do carrinho e dei um new no seu mapa de itens, dai deu certo. Porém eu acho que o correto deveria dar um new no objeto carrinho ao invés de dar new somente em seu mapa de itens.

eu fiz dessa forma também:

carrinho = new CarrinhoCompras();

mas o Spring não limpou.

segue abaixo como esta minha classe

@RequestMapping("/pagamento")
@Controller
public class PagamentoController {
    @Autowired
    CarrinhoCompras carrinho;

    @Autowired
    RestTemplate restTemplate;

    @Autowired
    private MailSender sender;

    @RequestMapping(value = "/finalizar", method = RequestMethod.POST)
    public Callable<ModelAndView> finalizar(@AuthenticationPrincipal final Usuario usuario, final RedirectAttributes model,
            final CarrinhoCompras carrinhoCompras) {
        Callable<ModelAndView> call = new Callable<ModelAndView>() {
            @Override
            public ModelAndView call() throws Exception {
                try {
                    String uri = "http://book-payment.herokuapp.com/payment";
                    String response = restTemplate.postForObject(uri, new DadosPagamento(carrinho.getTotal()),
                            String.class);
                    model.addFlashAttribute("sucesso", response);
                    // envia email para o usuário
                    enviaEmailCompraProduto(usuario);

                    //Limpando carrinho
                    carrinho.setItens(new  LinkedHashMap<CarrinhoItem, Integer>());

                    return new ModelAndView("redirect:/produtos");

                } catch (HttpClientErrorException e) {
                    e.printStackTrace();
                    model.addFlashAttribute("message", "Valor maior que o permitido");
                    return new ModelAndView("redirect:/produtos");
                }
            }
        };
        return call;
    }

    private void enviaEmailCompraProduto(Usuario usuario) {
        SimpleMailMessage email = new SimpleMailMessage();

        email.setSubject("Compra finalizada com sucesso");
        email.setTo("marcospinheirorocha@gmail.com");
        email.setText("Compra aprovada com sucesso no valor de " + carrinho.getTotal());
        email.setFrom("marcospinheirorocha@gmail.com");

        sender.send(email);
    }
}