千家信息网

springboot异常与重定向如何实现

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,本篇内容主要讲解"springboot异常与重定向如何实现",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"springboot异常与重定向如何实现"吧!sp
千家信息网最后更新 2026年11月03日springboot异常与重定向如何实现

本篇内容主要讲解"springboot异常与重定向如何实现",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"springboot异常与重定向如何实现"吧!

springboot 异常与重定向

在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中的不同。

springboot 异常统一处理

这里先对需要使用到的注解或者类进行说明,顺便理清楚条理。

@ExceptionHandler:注解使用在方法上,值为指定某个异常,当该方法所在的controller出现的异常与注解的异常对应,则会触发注解的方法。

下面这个controller一旦出现异常都会将异常捕获转给该方法进行处理

@RestController@RequestMapping("user")public class UserController {    @ExceptionHandler(value = Exception.class)    public void solveException(){        //异常处理逻辑    }    }

@controllerAdvice: 注解在类上,注解的类会注册到spring容器中,类中可有三种注解,@ExceptionHandler,@InitBinder,@ModelAttribute。该类下只要是注解上面三个注解的方法就是让把方法应用到程序中所有带有@RequesMapping注解的方法上。

流程 :

  • 自定义一个自己的异常

  • 声明带有@ControllerAdvice的类和@ExceptionHandler的方法,将@ExceptionHandler的方法应用到所有controller。

  • 声明一个返回结果类

  • 声明一个枚举类,用来包含可能出现的异常类型

Demo

自定义异常:

@Data@AllArgsConstructorpublic class MyException extends RuntimeException{    private Integer code;    private String msg;    public MyException(ResultEnum resultEnum){        this.msg = resultEnum.getMsg();        this.code = resultEnum.getCode();    }}

自定义返回结果:

@Data@AllArgsConstructor@NoArgsConstructorpublic class Result {    private int code;    private String msg;}

枚举类:

public enum  ResultEnum {    UNKNOW_ERROR(-1,"未知错误"),    USER_ERROR(-2,"用户信息错误"),    SUCCESS(0,"成功");    private  Integer code;    private  String msg;    ResultEnum(Integer code, String msg) {        this.code = code;        this.msg = msg;    }    //省略getter和setter}

工具类:

public class ResultUtil {    public static Result error(Integer code, String msg) {        Result result = new Result();        result.setCode(code);        result.setMsg(msg);        return result;    }}

自定义异常捕获类:

@ControllerAdvice@Slf4jpublic class MyExceptionHandler { //接收的是Exception,也就是只要是异常都会执行这方法    @ExceptionHandler(value=Exception.class)    @ResponseBody    public Result handle(Exception e){        if(e instanceof MyException){            MyException myException = (MyException) e;            return ResultUtil.error(myException.getCode(),myException.getMsg());        }else{            return ResultUtil.error(-1,"未知错误");        }    }}

controller类:

@RestController@RequestMapping("user")public class UserController {    @GetMapping("exception")    public void catchException() throws Exception{        throw new MyException(ResultEnum.USER_ERROR);    } }

流程:

  • 我们访问http://localhost:8080/user/exception来访问该方法,并抛出我们自定义的异常,通过枚举类来进行对异常信息的集合。

  • 通过自定义的异常捕获类,来进行对异常的捕获,执行方法。

  • 异常捕获类的方法中,通过ResultUtil工具类来进行生成Result对象返回。

到此,相信大家对"springboot异常与重定向如何实现"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

方法 注解 首页 结果 信息 类型 错误 内容 前缀 时候 处理 工具 方式 永久性 流程 页面 永久 学习 应用 不同 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技园 广东猪兼强互联网科技有限公司 苏州找大状互联网科技有限公司 互联网科技公司税收优惠 互联网中国科技 富国互联网科技创新基金 青岛中康互联网医疗科技有限公司 荆州市昕露互联网络科技有限公司 玉溪互联网科技怎么选 中和天地互联网科技有限公司 无锡工业互联网科技有限公司 互联网科技数字货币 南京一网一红互联网科技有限公司 新氧科技和美国互联网有关系吗 广州智享互联网科技 长沙渺峰互联网科技有限公司 同城互联网络科技 互联网时代高科技布局 银川新华互联网科技学校招聘 恒生科技互联网指数十大成分股 互联网科技资迅 金融科技创新监管互联网金融 万达互联网科技 移动互联网科技股 互联网科技创新服务 上海京穆互联网科技有限公司 山东星卡互联网科技有限公司官网 下一代互联网重大应用科技园 版纳互联网科技选哪家 优雇互联网科技有限公司
0