大致说下流程,
首先我们自定义一个自己的异常类CustomException,继承RuntimeException。再写一个异常管理类ExceptionManager,用来抛出自定义的异常。
然后使用Spring提供的注解@RestControllerAdvice或者@ControllerAdvice写一个统一异常处理的类,在这个类中写一个带有@ExceptionHandler(Exception.class)注解的方法,这个方法会接收到所有抛出的异常,在方法内部我们就可以写自己的异常处理逻辑。
如果参数是CustomException类型,我们就自定义返回体,返回异常字典的错误信息。如果是其它类型的异常就返回系统异常。
话不多说,上代码。
Environment是spring的环境类,会包含所有properties文件的键值对。
需要加载到spring的环境中,我是用配置类加载的,方式如下:
@Component @PropertySource(value = {"exception.properties"}, encoding = "UTF-8") public class LoadProperty { }ApiResult是我处定义的接口json返回,代码也一并贴上.
//ApiResult /** * @author kingboy--KingBoyWorld@163.com * @date 2017/7/23 下午7:19 * @desc 返回体. */ @Data public abstract class ApiResult { protected String code; /** * 成功的返回 * @param data 数据 * @return 正常返回体 */ public static ApiResult success(Object data) { return new SuccessApiResult(data); } /** * 错误返回 * @param errorCode 错误码 * @param errorMessage 错误信息 * @return 错误返回体 */ public static ApiResult error(String errorCode, String errorMessage) { return new ErrorApiResult(errorCode, errorMessage); } } //SuccessApiResult @Data public class SuccessApiResult extends ApiResult { private Object data; SuccessApiResult(Object data) { this.code = "0"; this.data = data; } } //ErrorApiResult @Data public class ErrorApiResult extends ApiResult { private String msg; ErrorApiResult(String code, String msg) { this.code = code; this.msg = msg; } }返回信息如下:
{ "code": "EC00001", "msg": "SSO的WEB层错误" }