Java BindingResult出现错误时,POST方法返回错误的URL

Java BindingResult出现错误时,POST方法返回错误的URL,java,spring-mvc,http-post,thymeleaf,Java,Spring Mvc,Http Post,Thymeleaf,我有一个POST方法,它只验证一个表单,如果表单被验证,它会返回一个确认视图,如果有任何字段错误,我想发送回注册屏幕。在这种情况下,如果BindingResult对象有错误,系统会将用户发送回表单屏幕,但显示的URL为“/registerConfirmation”,只有在表单没有错误的情况下才会显示该URL @RequestMapping(value="/registerConfirmation", method = RequestMethod.POST) public ModelAndView

我有一个POST方法,它只验证一个表单,如果表单被验证,它会返回一个确认视图,如果有任何字段错误,我想发送回注册屏幕。在这种情况下,如果BindingResult对象有错误,系统会将用户发送回表单屏幕,但显示的URL为“/registerConfirmation”,只有在表单没有错误的情况下才会显示该URL

@RequestMapping(value="/registerConfirmation", method = RequestMethod.POST)
public ModelAndView confirmRegister(@Valid @ModelAttribute("form") RegistrationForm form, BindingResult result){
    logger.info("Sending registration data");
    ModelAndView modelAndView = new ModelAndView();
    if(result.hasErrors()){
        modelAndView.setViewName("register");
        modelAndView.addObject("form", form);
        return modelAndView;
    }
    //more code here

    return modelAndView;

}
我不知道我遗漏了什么,因为我在许多其他帖子中看到过类似的方法。有什么帮助吗


非常感谢

解决问题的一种方法是使用重定向:

@RequestMapping(value="/registerConfirmation", method = RequestMethod.POST)
public String confirmRegister(@Valid @ModelAttribute("form") RegistrationForm form, BindingResult result, RedirectAttributes attr){
     logger.info("Sending registration data");
     if(result.hasErrors()){
       attr.addFlashAttribute("org.springframework.validation.BindingResult.form", result);
       attr.addFlashAttribute("form", form);
       return "redirect:/register";
     }
     //more code here    
     return "redirect:/registerConfirmation";
}
在register GET方法中,您应该检查:

@RequestMapping(value="/register", method = RequestMethod.GET)
public String showRegister(Model model) {
     ....
    if (!model.containsAttribute("form")) {
        model.addAttribute("form", new RegistrationForm());
    }
    .....
}
你可以读更多

也别忘了用
registerConfirmation
value创建GET方法。

你好,Enigo,我有一个GET方法,我尝试使用重定向,但是我丢失了数据,有没有错误。那么,@KrOMaG,你还有什么问题吗?是的,我可以在/registerConfirmation中打印出我对象的值,但是,当,从这个模型中,我向相同的POST方法/注册表确认重新发送了一个nullpointerException,就好像我有一个空对象一样!。我还有一个问题,为什么需要register GET和POST方法以及register-confirmation的GET和POST方法?非常感谢!好吧,如果您实际上不需要方法,那么您不需要所有的for方法:)GET方法在您进入页面时基本上是有效的。POST-当用户按下提交按钮时。所以你可以选择需要多少方法。我写了关于注册表确认的GET方法,因为我认为您也想显示该页面。当您重新发送时,哪个对象是空的?我正在按照您之前发布的链接中的示例进行操作,现在我得到一个“请求方法'GET'不受支持”。我想按两次提交按钮,首先验证数据并在确认屏幕中显示,然后在此屏幕(如果用户同意)再次发送数据并将新用户存储在数据库中。哇,当我想到这一点时,它看起来更容易了。