返回ModelAndView时尝试使用“redirect:”前缀重定向页面时的状态404

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了返回ModelAndView时尝试使用“redirect:”前缀重定向页面时的状态404相关的知识,希望对你有一定的参考价值。

我正在尝试在成功登录后重定向我的请求,涉及2个页面,通常是登录和登录成功

这是Login映射的Controller类

@Controller
@SessionAttributes("userObj")
@RequestMapping("/user")
public class UserController {

  @RequestMapping(value = "/login", method = RequestMethod.GET)
  public ModelAndView initLoginView(ModelAndView mv) {

    mv.addObject("userObj", new User());
    mv.setViewName("user/login");

    return mv;
  }

  @RequestMapping(value = "/login", method = RequestMethod.POST)
  public ModelAndView loginUser(ModelAndView mv, @ModelAttribute("userObj") User user, BindingResult result, SessionStatus status) {

    System.out.println(user.getUserName());
    System.out.println(user.getPassword());

    mv.addObject("userObj", user);
    mv.setViewName("redirect:/user/loginSuccess");

    return mv;
  }
} 

我得到404,资源未找到错误,所以我怀疑我从POST方法返回的ModelAndView对象是罪魁祸首,所以我将返回的值更改为

mv.setViewName("user/loginSuccess");
return mv;

mv.setViewName("redirect:/user/loginSuccess");
return mv;

并且成功加载页面,我正在尝试实现“post / redirect / get设计模式”,避免重复表单提交,我看到很多关于使用重定向的示例:在ModelAndView对象中,但不是它们我看到了404异常问题。请帮忙。并提前致谢。

编辑:当我做这样的返回语句mv.setViewName(“user / loginSuccess”);刷新loginSucsess页面时,我收到此警告

答案

我只是设法在网上挖掘一些资源,幸运的是,服务器向我发出“警告:没有找到带有URI的HTTP请求的映射,这让我意识到要采用这种方法

注意:我决定使用“注册”功能解决我的问题而不是“登录”功能,它仍然是处理POST方法的相同功能,我刚刚在创建登录功能时找到了一些关于Spring Security的好资源

@Controller
@SessionAttributes("userObj")
@RequestMapping("/user")
public class UserController {

@Resource(name = "userManager")
private UserManager userManager;

@RequestMapping(value = "/register", method = RequestMethod.GET)
public ModelAndView setUpRegisterView(ModelAndView mv) {

    mv.addObject("userObj", new User());
    mv.setViewName("user/register");

    return mv;
}

@RequestMapping(value = "/register", method = RequestMethod.POST)
public ModelAndView registerUser(ModelAndView mv, @ModelAttribute("userObj") User user, BindingResult result, RedirectAttributes ra) {

    userManager.saveUser(user);

    mv = new ModelAndView(new RedirectView("/user/registerSuccess", true));
    ra.addFlashAttribute(user);

    return mv;
}

@RequestMapping(value = "/registerSuccess", method = RequestMethod.GET)
public ModelAndView registerSuccess(ModelAndView mv) {

    mv.setViewName("user/registerSuccess");
    return mv;
 }
}

使用RedirectView类并添加另一个处理程序方法来映射重定向视图,我设法克服了复制形式的子问题,刷新了“registerSuccess”页面并监视我的数据库,没有发生重复的数据。

奇怪的是,我无法找到使用RedirectView类的任何示例,说明需要另一个处理程序方法来映射重定向请求

另一答案

我的404是由于当你返回“/myPage.jsp”的视图时,你会这样做

return "/myPage";

但是当你重定向到它时,你会这样做

return "redirect:/myPage.jsp";

以上是关于返回ModelAndView时尝试使用“redirect:”前缀重定向页面时的状态404的主要内容,如果未能解决你的问题,请参考以下文章

为啥自己搭建的ssm框架 modelandview跳转页面,返回值有了但是页面不跳转?

使用modelAndView返回页面不正确

使用modelAndView返回页面不正确

ModelAndView 和 Model ModelMap 返回值区别

Spring Boot - 使用 ModelAndView 返回 ResponseEntity

返回值分类 (voidstring modelAndView)