Spring Handle FlashAttributes после RedirectView

У меня есть страница check, где я добавляю flashAttribute("error","Test message"); и возвращаю RedirectView на страницу login.

@RequestMapping(value = "/login")
public ModelAndView mainPage(Model model){

    System.out.println(" - " + model.asMap().get("error") + " - "); //-> - null -

    return new ModelAndView("/login");

}

@RequestMapping(value = "/check")
public View checkLogin(RedirectAttributes redirectAttributes,
                       @RequestHeader(value = "username", required = false)String username,
                       @RequestHeader(value = "password", required = false)String password){

    redirectAttributes.addFlashAttribute("error", "Test message");
    return new RedirectView("/login");

}

Эта строка: model.asMap().get("error") вернуть null. Как я могу справиться RedirectAttributes?

По той же причине у вас это. Атрибуты флэш-памяти хранятся в сеансе, вы где-то теряете сеанс, поэтому атрибуты флэш-памяти отсутствуют. Исправьте одно, и оно исправит другое.

M. Deinum 20.06.2019 14:51
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
1
449
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Думаю, это может вам помочь.

@RequestMapping(value = "/login")
public ModelAndView mainPage(RedirectAttributes redirectAttrs){
    Map<String> attributesMap = redirectAttrs.getFlashAttributes();

    return new ModelAndView("/login");

}

@RequestMapping(value = "/check")
public View checkLogin(RedirectAttributes redirectAttributes,
                       @RequestHeader(value = "username", required = false)String username,
                       @RequestHeader(value = "password", required = false)String password){

    redirectAttributes.addFlashAttribute("error", "Test message");
    return new RedirectView("/login");

}

Надеюсь это поможет

Это не работает. Но я думаю, что проблема в сессии. Как сказал М. Дейнум. Вот моя проблема с сеансом stackoverflow.com/questions/56648205/…

KunLun 21.06.2019 14:43

конечно, перенаправление возвращает запрос клиенту с сущностью в заголовке http для запроса другого пути к ресурсам. Поскольку во время настройки нового запроса информация старого запроса удаляется, вы теряете атрибуты, если не сохраняете их в модели/сессино. Я думаю, это указано в ссылке, которую я добавил. Может быть, посмотрите, как работает перенаправление на стороне клиента.

FishingIsLife 21.06.2019 15:21

Я решил свою проблему с помощью сеанса. Вы можете посмотреть здесь, если вам интересно. Но проблема с чтением flashAttribute осталась. Даже с вашим ответом я все еще не понимаю flashAttributes. redirectAttrs.getFlashAttributes() пуст, даже если сеанс тот же.

KunLun 21.06.2019 22:17

Ok. почему вы используете RedirectView в качестве возвращаемого параметра? Мне кажется, вы хотите перенаправить на другой ресурс той же службы. Таким образом, вы можете использовать переадресацию вместо перенаправления, и вы можете использовать ModelAndView в качестве возвращаемого типа. Поэтому, возможно, попробуйте: return new ModelAndView("forward:/login"), возможно, посмотрите здесь baeldung.com/spring-redirect-and-forward Как вы можете видеть в пункте 5, перенаправление использует совершенно новый запрос, а перенаправление пересылает тот же запрос без изменений.

FishingIsLife 24.06.2019 07:31

Я использую RedirectView, потому что redirect:/page перенаправляет на неправильный URL. Мое приложение работает на сервере Tomcat, например mydom.com/myapp/. Но с Apache в качестве обратного прокси-сервера он работает напрямую на mydom.com/. Когда я использую redirect:/page, он перенаправляет на mydom.com/myapp/page, что является недействительной ссылкой. RedirectView перенаправляет на mydom.com/page, что правильно. forward:/page — это перенаправление, которое меняет страницу, но URL не меняется на /page

KunLun 24.06.2019 11:29

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