Состояние 404 при попытке перенаправить страницу с использованием префикса "redirect:" при возврате ModelAndView

Я пытаюсь перенаправить мой запрос после успешного входа в систему, участвуют 2 страницы, обычно вход в систему и вход в систему

вот класс 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, ресурс не найден, поэтому я подозреваю, что мой возвращенный объект ModelAndView из метода POST является виновником, поэтому я изменил возвращенное значение на

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

от

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

и успешно загружает страницу, я пытаюсь добиться "шаблона разработки post/redirect/get", который позволяет избежать повторной отправки формы, я вижу множество примеров, где используется перенаправление: в объекте ModelAndView, но не из них я видел проблему 404 исключения. любая помощь там, пожалуйста. И спасибо заранее.

РЕДАКТИРОВАНИЕ: когда я делаю инструкцию возврата, как это mv.setViewName("user/loginSuccess"); Я получаю это предупреждение при обновлении страницы loginSucsess

дубликат представления формы

2 ответа

Мне просто удается выкопать некоторые ресурсы в Интернете, и, к счастью, сервер выдает мне сообщение "ПРЕДУПРЕЖДЕНИЕ: не найдено сопоставление для HTTP-запроса с URI, что заставило меня осознать, что я использую такой подход".

ПРИМЕЧАНИЕ: вместо функции "Вход в систему" ​​я решил решить свою проблему с помощью функции "Регистрация". Это все та же функция, которая работает с методом 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";

Другие вопросы по тегам