Essa dúvida já foi postada anteriormente, porém não obteve resposta. Então estou recriando. Estou utilizando o s:mvcUrl para fazer o action de algumas ações, mas a URL está vindo errada. A URL está vindo assim para remover um produto do carrinho:
<http://localhost:8080/casadocodigo/WEB-INF/views/carrinho/itens.jsp/carrinho/remover?produtoId=17&tipoPreco=COMBO>
E para finalizar a compra fica assim:
http://localhost:8080/casadocodigo/WEB-INF/views/carrinho/itens.jsp/pagamento/finalizar
O meu itens.jsp está assim:
<form:form action="${s:mvcUrl('CCC#remover').arg(0, item.produto.id).arg(1,item.tipoPreco).build() }" method="POST">
<input type="image" src="${contextPath }resources/imagens/excluir.png"
alt="Excluir" title="Excluir" />
</form:form>
e assim:
<form:form action="${s:mvcUrl('PC#finalizar').build()}" method="post">
<input type="submit" class="checkout" name="checkout" value="Finalizar compra" />
</form:form>
Meu PagamentoController.java está assim:
@Controller
@RequestMapping("/pagamento")
public class PagamentoController {
@Autowired
public CarrinhoCompras carrinho;
@Autowired
private RestTemplate restTemplate;
@Autowired
private MailSender sender;
@RequestMapping(value = "/finalizar", method = RequestMethod.POST)
public Callable<ModelAndView> finalizar(@AuthenticationPrincipal Usuario usuario, RedirectAttributes model) {
return () -> {
String uri = "http://book-payment.herokuapp.com/payment";
String attributeName = null;
Object attributeValue = null;
try {
String response = restTemplate.postForObject(uri, new DadosPagamento(carrinho.getTotal()), String.class);
System.out.println(response);
enviaEmailCompraProduto(usuario);
attributeName = "sucesso";
attributeValue = response;
} catch (HttpClientErrorException e) {
e.printStackTrace();
System.out.println(e.getMessage());
attributeName = "falha";
attributeValue = "Valor maior que o permitido.";
}
model.addFlashAttribute(attributeName, attributeValue);
ModelAndView modelAndView = new ModelAndView("redirect:/produtos");
return modelAndView;
};
}
private void enviaEmailCompraProduto(Usuario usuario) {
try {
SimpleMailMessage email = new SimpleMailMessage();
email.setSubject("Compra finalizada com sucesso");
email.setTo(usuario.getEmail());
email.setText("Compra aprovada com sucesso no valor de " + carrinho.getTotal() + ".");
email.setFrom("compras@casadocodigo.com.br");
sender.send(email);
} catch (Exception e) {
System.out.println("Erro no envio do email: " + e.getMessage());
}
}
}
Se eu uso a URL direto, ao invés de suar o mvcUrl, ai funciona a chamada. Alguma dica?