@RequestMapping方法中的前提条件?

时间:2018-08-27 15:42:38

标签: spring spring-mvc

如果用户不满足@RequestMapping的某些先决条件,我不知道如何重定向用户。

我有一个简单的表单,该表单完成后会将用户发送到与“ / firstForm”无关的“ / secondForm”,如果第一个表单尚未完成,如何限制对“ / secondForm”的访问?

这对我来说更困难的是中间有一个控制器。

firstForm ---(提交)---> emailController ----(重定向) ----> secondForm

2 个答案:

答案 0 :(得分:0)

如果要在满足某些条件时将用户重定向到另一个页面,可以使用拦截器。示例拦截器类:

@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,那么可以在spring config xml中使用它:

<mvc:interceptors>
    <bean id="redirectInterceptor" class="path.to.your.interceptor.RedirectInterceptor"/>
</mvc:interceptors>

答案 1 :(得分:0)

找到了另一种方法:

使用FlashAttribute,方法是在emailController的重定向之前分配一个用于设置值的值。

在applicationController中,如果没有FlashAttribute,则使用if语句,然后将重定向重定向到应用程序的根。