gpt4 book ai didi

java - 从异常重定向回来后如何将数据保留在表单中

转载 作者:行者123 更新时间:2023-12-02 03:04:57 24 4
gpt4 key购买 nike

我有一个 html 注册表单(Thymeleaf 模板),一旦我提交此表单,就会调用以下 Controller 方法:

@PostMapping("/signup_do")
public String register(Account account) {
accountManagement.accountRegistration(account);

return "Success";
}

现在 accountRegistration 是一个抛出 SignupFormException 的服务方法,它扩展了 RuntimeException。该异常在与 Controller 相同的类中使用 @ExceptionHandler 注解进行处理,如下所示:

@ExceptionHandler(value=SignupFormException.class)
public String handle() {
return "redirect:/signup";
}

遇到异常时,这会返回一个空的注册表单。但我希望可以保留填充的值。

如果我可以将最初传递给/signup_do Controller 的帐户对象接收到此异常处理程序方法中,我可以轻松返回模型对象。但以下方法不起作用:

@ExceptionHandler(value=SignupFormException.class)
public String handle(Account account) { //trying to get the account object
System.out.println(account.getUsername());
return "redirect:/signup";
}

抛出的异常是:

java.lang.IllegalStateException: Could not resolve parameter [0] in public java.lang.String tv.redore.controller.AccountController.handle(tv.redore.entity.Account): No suitable resolver

最佳答案

有很多方法可以做到这一点,但是您可以例如将此值存储在 session 中,这是有意义的,因为您希望这些值超越请求进入异常处理。

  1. 当您在 Controller 中收到信息时,将其存储在 session 中:

    @PostMapping("/signup_do")
    public String register(HttpSession session, Account account) {
    session.setAttribute("account", account);
    accountManagement.accountRegistration(account);

    return "Success";
    }
  2. 在异常处理程序中恢复帐户信息并将其传递给模型:

    @ExceptionHandler(value=SignupFormException.class)
    public String handle(Model model, HttpServletRequest req) {
    Account account = req.getSession().getAttribute("account");
    req.getSession().removeAttribute("account"); //Important, you don't want to keep useless objects in your session
    model.addAttriute(account.getUsername());
    return "redirect:/signup";
    }

您甚至可以将异常添加到处理程序:

public String handle(Model model, HttpServletRequest req)

这样您就可以了解有关失败原因的更多信息,并知道该怎么做。

关于java - 从异常重定向回来后如何将数据保留在表单中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57028558/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com