1)相关依赖
org.springframework.boot
spring-boot-starter-web
org.projectlombok
lombok
true
2)Json数据包装类
@Data
@AllArgsConstructor
@NoArgsConstructor
public class JsonResult {
private Integer code;
private String msg;
private String url;
}
3)全局异常处理类
/**
- 全局异常处理
*/
@Slf4j
@RestControllerAdvice
public class GlobalExceptionHanlder {
@ExceptionHandler(Exception.class)
public ResponseEntity handleException(Exception ex, HttpServletRequest request){
log.error("Exception ",ex);
return ResponseEntity.ok(new JsonResult(500,ex.getMessage(),request.getRequestURL().toString()));
}
}
代码说明:
@Slf4j 是注入日志对象log
@RestControllerAdvice 注解将当前类作为全局异常处理类,Rest表示里面所有方法都直接返回JSON数据,
如果需要页面跳转可以使用@ControllerAdvice
@ExceptionHandler配置异常处理方法,value是处理的异常类型,Exception.class就是处理所有异常了
处理方法中进行了日志输出,并将异常信息以JSON方法发送给客户端。
4)测试
@RestController
@RequestMapping("/test")
public class TestController {
@GetMapping("/{id}")
public ResponseEntity findUser(@PathVariable(“id”) Long id){
int n = 10 / 0;
return ResponseEntity.ok(“查询到用户” + id);
}
}
=====================================================================
上面案例中处理的是通用的异常,我们在做开发时,经常需要根据业务需要自定义异常,对自定义异常的处理也应该和通用异常的处理有所区别。
1) 添加自定义异常
/**
- 自定义业务异常
*/
@Data
@NoArgsConstructor
public class BizException extends RuntimeException {
private Integer code;
private String msg;
public BizException(Integer code,String msg) {
super(msg);
this.code = code;
this.msg = msg;
}
}
2) 给全局异常处理类,添加新方法
@ExceptionHandler(BizException.class)
public ResponseEntity handleBizException(BizException ex, HttpServletRequest request){
log.error("BizException ",ex);
return ResponseEntity.ok(new JsonResult(ex.getCode(),ex.getMessage(),request.getRequestURL().toString()));
}
3)测试
@RestController
@RequestMapping("/test")
public class TestController {
@GetMapping("/{id}")
public ResponseEntity findUser(@PathVariable(“id”) Long id){
// int n = 10 / 0;
if(id > 100){
throw new BizException(404,“没有此用户”);
}
return ResponseEntity.ok(“查询到用户” + id);
}
}
====================================================================
SpringBoot默认使用slf4j+logba
【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 开源分享
ck的方式完成日志处理。
@Slf4j注解能够给所在类注入log对象,能够输出各种级别的日志,级别由低到高:
trace < debug < info < warn < error
日志默认只能在控制台输出
项目上线后,肯定需要日志文件来记录运行过程,那么就需要对日志进行配置
在resources下添加logback-spring.xml配置文件就可以了,内容如下:
<?xml version="1.0" encoding="UTF-8"?>