【发布时间】:2019-07-15 17:52:16
【问题描述】:
我有一个 thymeleaf 注册表单,如果我们提交它,则会调用位于“/signup_do”的控制器来验证用户并将其保存到数据库:
<form action="/signup_do" method="post">
...
</form>
“/signup_do”处的控制器将请求传递给 accountRegistration 服务方法,该方法进行验证:
@PostMapping("/signup_do")
public String register(Account account, HttpSession session) {
session.setAttribute("accountToRegister", account);
accountManagement.accountRegistration(account);
return "Success";
}
账户注册方法可以抛出异常SignupFormException,由该控制器类中定义的@ExceptionHandler处理:
@ExceptionHandler(value=SignupFormException.class)
public String handle(HttpSession session, Model response) {
Account returnDataToForm = (Account) session.getAttribute("accountToRegister");
response.addAttribute("name", returnDataToForm.getFirstName());
session.invalidate();
return "signup";
}
现在问题是当异常发生时,在表单中输入的内容被传回注册表单,输入的数据保持不变,但url仍然保持为/ signup_do。
我尝试使用 return "redirect:/signup" 代替,它确实改变了 url,但它最终向 /signup url 发出了一个 get 请求,例如
/signup?name=John...
但我的 /signup 控制器不是为处理获取请求而设计的,它只知道显示表单,因此信息丢失了。
@GetMapping("/signup")
public String signupPage() {return "signup";}
我也尝试过使用 forward:/signup,但最终抛出 405 错误。
【问题讨论】:
标签: spring-boot thymeleaf