统一异常处理@ExceptionHandler

在开发过程中,我们会遇到很多的异常,比方说:500,如果直接返回给用户,则显得很low,此时我们就需要捕获异常

先举个下例子:

1)简单异常的捕获

public class ErrorController {
	//一般情况下初学者都会用try-catch来进行简单的异常捕获,如下所示
	// 1)一般情况下
	public String testError(int a) {
		
		int b = 0 ;
		
		try {
			b=1/a;
		} catch (Exception e) {
			return "系统错误";
		}
		
		
		return "success"+b;
	
	}
}


注:由于开发过程中有较多的方法,如果按照此方法来捕获异常则较为繁琐,因此引入全局捕获异常

2)全局异常捕获

全局捕获异常的原理:使用AOP切面技术

用@RequestBody,@ResponseBody,就解决了JSon自动绑定。接着就发现,如果遇到RuntimeException,需要给出一个默认返回JSON。

(1)创建一个utils工具类,来捕获全局异常

package com.demo.utils;

import java.util.HashMap;
import java.util.Map;

import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * 全局捕获异常
 * 原理:使用AOP切面技术
 * 捕捉返回json串
 * @author hzz
 */
@ControllerAdvice(basePackages="com.demo.controller")
public class ErrorUtil {
	//统一异常处理@ExceptionHandler,主要用于RuntimeException
	@ExceptionHandler(RuntimeException.class)
	@ResponseBody//返回json串
  public Map errorResoult(){
	  Map errorMap= new HashMap();
	  errorMap.put("errorCode", "500");
	  errorMap.put("errorMsg", "系统错误");
	  return errorMap;
  }
}

(2)控制层代码

package com.demo.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * 全局捕获异常例子
 * @author hzz
 *
 */
@RestController
public class ErrorController {
	
	//2)全局捕获异常 
	@RequestMapping("/test-error")
	public String testError(int a) {		
		int b = 1/a;
		return "success"+b;
	
	}


}

这就是简单的全局捕获异常,实际开发中还需要log日志的打印,后期我将会继续更新,由于博主刚入Java坑不久,难免有些错误,请大家批评,共同提高。

你可能感兴趣的:(Java基础)