Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Spirng boot submissão do formulario

Olá pessoal! Tenho um projeto feito em spring boot que estou tendo problema para submeter um formulario vou tenho alguns metodos na controller para reinicializacao de senha que são: 1- Gera url e envia por email para o usuario url via GET 2- É o metodo chamado na url gerada no primeiro via GET 3- Método POST que recebe os dados inseridos no formulario estou utulizando thymeleaf

A controller está anotada assim:

@RequestMapping("api/user")
@Controller
public class UserSystemController {

Os métodos são:

    @RequestMapping(value = "/requestResetPassword", method = RequestMethod.POST, produces = { "application/json; charset=UTF-8" })
    @ResponseBody  
    public ReturnHolder requestResetPassword(@RequestBody UserHolder loginHolder, @RequestHeader(required = false) HttpHeaders header) {

        ReturnHolder holder = new ReturnHolder();

        try {
        //chama o metodo que gera a url até aqui esta ok
holder.setData(userSystemServiceImpl.requestResetPassword(loginHolder));

        } catch (Exception e) {
        ...    
        }

        return holder;
    }
// metodo recebe  os parametros confere tudo e retorna a pagina ele tbm está funcionando
@RequestMapping(value = "/resetPassword/{validationCode}/{email}", method = RequestMethod.GET)
    public ModelAndView resetPassword(@PathVariable("validationCode") String validationCode, @PathVariable ("email") String email, 
                                                                     @RequestHeader(required = false) HttpHeaders header, Model models) {

        ModelAndView model = null;
        try {

            ResetPasswordHolder resetPassword = userSystemServiceImpl.resetPassword(validationCode, email);

            model = new ModelAndView("resetPassword");
            //model.addObject("email", resetPassword.getEmail());
            //model.addObject("validationCode", resetPassword.getValidationCode());

            model = "/resetPassword";
        } catch (Exception e) {
        ...
        }

        return model;

    }
// o problema esta em chamar esse método nao consigo na pagina simplesmente 
//nao chama, tentei diversas coisas mas nao vai
@PostMapping("changePassword")
    public String salvar(@RequestParam("password") String password, @RequestParam("dateBirth") String dateBirth, 
                         @RequestParam("emails") String emails, @RequestParam("validationCodes") String validationCodes){

        try {
            System.out.println(validationCodes);
            System.out.println("ok");
            //userSystemServiceImpl.changePassword(new ResetPasswordHolder(dateBirth.getTime(), email, password, validationCode));
        } catch (Exception e) {
            e.printStackTrace();
        }
    return "sucesso";

    }
//o html é esse que nao consigo fazer chamar o metodo tentei diversas coisas

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Reset de senha </title>
<link href="/bootstrap/css/bootstrap.min.css" rel="stylesheet" />
</head>
<body>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
    <script src="/bootstrap/js/bootstrap.min.js"></script>
    <script type="text/javascript">
        onload = function(){
                    $("#emails").val($("#username").text());
                    $("#validationCodes").val($("#code").text());
                };
    </script>
    <div class="container" style="margin-top: 20px" >


         <form action="changePassword" method="post"  >
            <div>
                <h1>Para alterar a senha preencha os campos abaixo</h1>
                <br/>
                <hr/> 
            </div>
            <div class="form-group">
                <span>Você ira alterar a senha para o email: </span>
                <span th:text = '${email}' id="username"></span><br/>
                <span th:text = '${validationCode}' id="code"></span><br/><br/>
                <input type="text" class="form-control" id="validationCodes" name="validationCodes" />
            </div>
            <div class="form-group">
                <label for="emails">E-mail</label> 
                <input type="email" class="form-control" id="emails" name="emails"  />
            </div>
            <div class="form-group">
                <label for="dateBirth">Data de aniversário</label> 
                <input type="date" class="form-control" id="dateBirth" name="dateBirth"  />
            </div>
            <div class="form-group">
                <label for="password">Senha</label> 
                <input type="password" class="form-control" id="password" name="password" />
            </div>
            <button type="submit" class="btn btn-primary">Salvar</button>
        </form> 

    </div>


</body>
</html>

Quem puder me ajudar ficarei muito agradecido.

2 respostas
solução!

Olá Daniel,

se entendi bem o método que gera esta jsp final é o segundo método resetPassword? É isso? Se for, o problema está na verdade na action da tag <form>. Como o método resetPassword tem a url /resetPassword/{validationCode}/{email}, veja se quando você clica para submeter o formulário ele está batendo numa rota assim /resetPassword/{validationCode}/changePassword.

Para corrigir este problema, na action do <form> você terá que falar a roda completa assim /api/user/changePassword, com a barra / no começo indicando que você quer voltar pra raiz do endereço.

Lucas muito obrigado pela ajuda era exatamente esse o problema.