在Spring MVC Controller中返回302状态代码

时间:2014-06-03 11:12:31

标签: spring http-status-code-302

我正在开发一个Spring MVC应用程序,我需要在我的控制器中检查一定的条件。如果是真的,我必须返回302状态代码。它是这样的:

@RequestMapping(value = "/mypath.shtml", method = RequestMethod.GET)
public ModelAndView pageHandler(@Valid MyForm form, BindingResult result, HttpServletRequest request,
        Locale locale) throws PageControllerException, InvalidPageContextException, ServiceException {

    if (someCondition){
        // return 302 status code
    }
    else{
        // Do some stuff
    }
}

这是最好的方法吗?

非常感谢您提前

3 个答案:

答案 0 :(得分:5)

我终于设法使用@ResponseStatus,如下所示:

https://stackoverflow.com/a/2067043/2982518

<强>更新

这是我最终做到的方式:

@ResponseStatus(value = HttpStatus.MOVED_TEMPORARILY)
public class MovedTemporarilyException extends RuntimeException {

    // ...
}

@RequestMapping(value = "/mypath.shtml", method = RequestMethod.GET)
public ModelAndView pageHandler(@Valid MyForm form, BindingResult result, HttpServletRequest request,
        Locale locale) throws PageControllerException, InvalidPageContextException, ServiceException {

    if (someCondition){
        throw new MovedTemporarilyException();
    }
    else{
        // Do some stuff
    }
}

答案 1 :(得分:3)

以下代码将执行:

if (someCondition){
    return new ModelAndView("redirect:" + someUrl)
}
else{
        // Do some stuff
}

答案 2 :(得分:1)

org.springframework.web.servlet.view.RedirectView有一些简单的参数。其中一个参数会从URL中删除模型属性。

之前的答案对我有用,但重定向Location头包含了一些拦截器post方法添加的模型属性。

返回新的RedirectView(newLocationVia302,true,true,false);