我正在开发一个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
}
}
这是最好的方法吗?
非常感谢您提前
答案 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);