在spring中,有两个重定向类型:
301,永久性跳转
302,暂时性跳转
默认调用302。
1.下面先通过一个简单的例子实现页面的重定向
@RequestMapping("/redirect/{code}")
public RedirectView redirectView(@PathVariable("code") int code,
HttpSession session){
RedirectView red = new RedirectView("/",true);
//判断是不是301异常
if (code == 301){
//默认为302转移,此处设置为永久性转移
red.setStatusCode(HttpStatus.MOVED_PERMANENTLY);
}
return red;
}
结果:
无论是访问“redirect/301”还是“redirect/302”,结果都会跳转到首页,只是一个是301类型,一个是302类型。
2.通过一个更简单的方法实现重定向
@RequestMapping("/redirect/{code}")
public RedirectView redirectView(@PathVariable("code") int code,
HttpSession session){
//这种跳转都是302跳转,通过一个redirect前缀告诉请求,要跳转到首页
//所有的redirect请求都会跳转到首页
return "redirect:/";
}
结果:
这种方式重定向,都是通过302的方式进行的,无论“redirect”后面的url是什么,因为只要识别到redirect这个前缀,就会跳转到首页。
3.在重定向过程中,用session传递信息
1.重定向页面
@RequestMapping("/redirect/{code}")
public String redirectView(@PathVariable("code") int code,
HttpSession session){
//这种跳转都是302跳转,通过一个redirect前缀告诉请求,要跳转到首页
//所有的redirect请求都会跳转到首页
//通过session来传递信息
session.setAttribute("msg","Jump from redirect");
return "redirect:/";
}
2.首页
@RequestMapping("/")
@ResponseBody
public String index(HttpSession session){
//在首页中显示重定向中的session
return "Hello World!" + session.getAttribute("msg");
}
结果:
无论redirect后面的url是什么,都会返回首页,并显示相应的信息。
4.admin请求异常
@RequestMapping("/admin")
@ResponseBody
public String admin(@RequestParam("key") String key){
//如果key=“admin”
if ("admin".equals(key)){
return "hello admin";
}
//否则抛出异常
throw new IllegalArgumentException("Key Wrong!");
}
结果:
在“key=admin”的时候,返回相应信息;在“key!=admin”的时候,返回错误信息。
5.自己定义异常:
@ExceptionHandler()
@ResponseBody
public String error(Exception e){
return "error:" + e.getMessage();
}
结果:
可以看出,在出现异常的时候,使我们自己定义的异常界面内容,和4中的不同。