SpringBoot2.x配置全局异常和自定义异常

it2022-05-25  67

服务端异常讲解和SpringBoot配置全局异常实战

注解介绍:

@ControllerAdvice 如果是返回json数据,则用RestControllerAdvice,就可以不加@ResponseBody

捕获全局异常,处理所有不可知的异常 @ExceptionHandler(value=Exception.class)

Controller代码:

package net.nbclass.demo.controller; import net.nbclass.demo.Module.ExecptionData; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * 异常测试 * Created by 5407 on 2018/9/25. */ @RestController public class ExecptionController { @RequestMapping("/ext") public String test(){ int i=1/0; --异常触发 return "Hello"; } }

异常处理类:

package net.nbclass.demo.Handler; import net.nbclass.demo.Module.ExecptionData; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; import javax.servlet.http.HttpServletRequest; import java.util.HashMap; import java.util.Map; /** * Created by 5407 on 2018/9/25. */ @RestControllerAdvice public class CustomExtHandler { @ExceptionHandler(value = Exception.class) Object handleException(Exception e, HttpServletRequest request){ Map<String,Object> map=new HashMap<>(); map.put("code",100); map.put("msg",e.getMessage()); map.put("url",request.getRequestURL()); return map; } }

 

 

 

服务端异常讲解和SpringBoot配置自定义异常实战

和全局异常区别不大,只是多了一点:

新建自定义异常类,需要继承基类【RuntimeException】:

package net.nbclass.demo.Module; /** * 自定义异常类 * Created by 5407 on 2018/9/25. */ public class ExecptionData extends RuntimeException{ public ExecptionData(String code,String msg){ this.code=code; this.msg=msg; } private String code; private String msg; public String getCode() { return code; } public void setCode(String code) { this.code = code; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } }

捕获异常并处理:

package net.nbclass.demo.Handler; import net.nbclass.demo.Module.ExecptionData; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; import javax.servlet.http.HttpServletRequest; import java.util.HashMap; import java.util.Map; /** * Created by 5407 on 2018/9/25. */ @RestControllerAdvice public class CustomExtHandler { @ExceptionHandler(value = Exception.class) Object handleException(Exception e, HttpServletRequest request){ Map<String,Object> map=new HashMap<>(); map.put("code",100); map.put("msg",e.getMessage()); map.put("url",request.getRequestURL()); return map; } @ExceptionHandler(value = ExecptionData.class) Object ExecptionData(ExecptionData e, HttpServletRequest request){ Map<String,Object> map=new HashMap<>(); map.put("code",11); map.put("msg",e.getMessage()); map.put("url",request.getRequestURL()); return map; //结合thymeleaf模板引擎实现页面跳转 //ModelAndView modelAndView = new ModelAndView(); //modelAndView.setViewName("index"); //modelAndView.addObject("msg", e.getMessage()); //return modelAndView; } }

Controller类触发异常:

package net.nbclass.demo.controller; import net.nbclass.demo.Module.ExecptionData; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * 异常测试 * Created by 5407 on 2018/9/25. */ @RestController public class ExecptionController { @RequestMapping("/ext") public String test(){ int i=1/0; return "Hello"; } @RequestMapping("/ext1") public Object test1(){ throw new ExecptionData("101","error"); } }

结果:

{"msg":null,"code":11,"url":"http://localhost:8080/ext1"}

返回页面:

 

附上目录结构:

 

转载于:https://www.cnblogs.com/Mblood/p/9700225.html

相关资源:数据结构—成绩单生成器

最新回复(0)