Предварительные условия в методе @RequestMapping? - PullRequest
0 голосов
/ 27 августа 2018

Я не знаю, как перенаправить пользователя, если он не отвечает определенным предварительным условиям для @RequestMapping.

У меня есть простая форма, которая после завершения отправляет пользователя в «/ secondForm», который не связан с «/ firstForm», как я могу ограничить доступ к «/ secondForm», если первая форма не была заполнена?

Что делает это более сложным для меня, так это контроллер в середине.

firstForm --- ( submit ) ---> emailController ---- ( redirect ) ---- > secondForm

Ответы [ 2 ]

0 голосов
/ 27 августа 2018

Найден дополнительный способ:

Использование FlashAttribute путем присвоения перед перенаправлением в emailController, который устанавливает значение.

В applicationController с помощью оператора if, если отсутствует FlashAttribute, вызывается перенаправление в корень приложения.

0 голосов
/ 27 августа 2018

Если вы хотите перенаправить пользователя на другую страницу при соблюдении определенных условий, вы можете использовать перехватчик. Пример класса перехватчика:

@Component
public class RedirectInterceptor implements HandlerInterceptor {

@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
    return true;
}

@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object o, ModelAndView modelAndView) {
    if (request.getRequestURI().contains("secondForm") && modelAndView.getModel().get("someBoolean") == false {
        try {
            response.sendRedirect("/firstForm");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

@Override
public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {

}
}

И зарегистрируйте его в классе конфигурации:

@Configuration
public class MvcConfig extends WebMvcConfigurerAdapter {

@Autowired
RedirectInterceptor redirectInterceptor;

@Override
public void addInterceptors(InterceptorRegistry registry) {
    registry.addInterceptor(redirectInterceptor);
}
}

Если вы предпочитаете конфигурацию xml, а не java, вы можете альтернативно использовать ее в своем весеннем конфиге xml:

<mvc:interceptors>
    <bean id="redirectInterceptor" class="path.to.your.interceptor.RedirectInterceptor"/>
</mvc:interceptors>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...