Состояние 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"
;