服务端异常讲解和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"}
返回页面:
附上目录结构: