一、消息数据统一返回给前台的处理方法
1、新建一个公共Result<T>类包含 code、msg、data私有变量,并提供set 和get 方法。(固定格式)
/**
* http请求返回的最外层对象
*/
public class Result<T> {
/*错误码*/
private Integer code;
/*提示信息*/
private String msg;
/*具体内容*/
private T data;
public Integer getCode() {
return code; } public void setCode(Integer code) { this.code = code; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public T getData() { return data; } public void setData(T data) { this.data = data; } }
2、新建一个ResultUtil工具类,编写静态方法,统一调用这个方法向前台返回
/**
* 前端访问数据返回处理工具类
* 依赖Result类
*/
public class ResultUtil {
/**
* 带数据的成功返回的方法
* @param object 数据对象
* @return
*/
public static Result success(Object object){
Result result = new Result();
result.setCode(0);
result.setMsg("成功");
result.setData(object); return result; } /** * 不带数据的成功返回的方法 * @return */ public static Result success(){ Result result = new Result(); result.setCode(0); result.setMsg("成功"); return result; } /** * 返回失败的方法 * @param code 错误代码 * @param msg 返回消息 * @return */ public static Result error(Integer code,String msg){ Result result = new Result(); result.setCode(code); result.setMsg(msg); return result; } }
二、通过异常统一处理返回给前台的处理方法
1、创建一个枚举,统一管理返回的code和message(相当于配置文件)
package com.du.enums;
/**
* 用来统一管理异常的code 和message
*/
public enum ResultEnum {
UNKONW_ERROR(-1,"未知错误"),
SUCCESS(0,"成功"),
PRIMARY_SCHOOL(100,"你可能在上小学"),
MIDDLE_SCHOOL(101,"你可能在上初中"), ; private Integer code; private String message; ResultEnum(Integer code, String message) { this.code = code; this.message = message; } public Integer getCode() { return code; } public String getMessage() { return message; }}
2、定义一个自己的异常,自定义返回数据格式
package com.du.Exception;
import com.du.enums.ResultEnum;
public class GrilException extends RuntimeException{
//spring框架仅仅对RuntimeException抛出的异常进行回滚,
//Exception不会所以继承该异常
private Integer code;
public GrilException(ResultEnum resultEnum) {
super(resultEnum.getMessage());
this.code = resultEnum.getCode();
}
public Integer getCode() { return code; } public void setCode(Integer code) { this.code = code; } }
3、进行捕获异常获取数据,未知错误情况下打印日志
package com.du.handle;
import com.du.Exception.GrilException;
import com.du.domain.Result;
import com.du.utils.ResultUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
/**
*handle包必须和controller、service包同级,
* 这样controller中抛出异常的时候才会被自动调用
*/
@ControllerAdvice//增强型控制器,对于控制器的全局配置放在同一个位置
public class ExceptionHandle {
private final static Logger logger = LoggerFactory.getLogger(ExceptionHandle.class);
@ExceptionHandler(value=Exception.class)//捕获的异常类型
@ResponseBody//没有@RestController这样写向前台返回数据
public Result handle(Exception e){
if(e instanceof GrilException){//判断异常是否为自定义的
GrilException grilException = (GrilException) e; return ResultUtil.error(grilException.getCode(),grilException.getMessage()); }else{ logger.error("【系统异常】{}",e); return ResultUtil.error(-1,"未知错误"); } } }