JSON统一格式返回值,统一异常处理

来源:互联网 发布:高光谱遥感数据 编辑:程序博客网 时间:2024/05/22 07:01

一,如果编写接口给他人调用,只有一段返回数据,没有其他信息说明这是非常不好的。

那问题来了,怎么不好呢?1,如果知识返回一段调用后的数据那还好,要是调用失败呢?如果没有返回码,没有信息提示,就让调用者去猜测吗,而不能做其他的处理。

所以为了更加规范的处理返回格式的问题,我把json封装了起来。


二,具体实现

用一个实体类规范json返回的格式

/** * @author Stopping * @see 统一json返回格式 * */public class Result {/*返回码*/private Integer code;/*返回信息提示*/private String message;/*返回的数据*/private Object data;public Result(){}public Result(Integer code,String message,Object data) {this.code = code;this.message = message;this.data = data;}@Overridepublic String toString() {return "Result [code=" + code + ", message=" + message + ", data=" + data + "]";}public Integer getCode() {return code;}public void setCode(Integer code) {this.code = code;}public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}public Object getData() {return data;}public void setData(Object data) {this.data = data;}}

编写一个枚举类,统一管理异常返回信息

/** * @author Stopping * @data 时间:2017/9/27 * */public enum ResultEnum {/**访问成功返回*/SUCCESS(0,"success"),/**数据不存在返回*/NOT_FOUND(-1,"notFound [数据不存在 或者 数据为空]"),/**异常返回*/ERROR(-1,"error [未知异常]"),/**参数有异常返回*/PARAMETER_ERROR(-1,"parameter error [参数异常:参数为空或者参数类型不符]");private Integer code;private String msg;private ResultEnum(Integer code,String msg) {this.code = code;this.msg = msg;}public Integer getCode() {return code;}public String getMsg() {return msg;}}

编写rusult工具类

/** * @author Stopping * @Data 2017/9/25 * @see json返回值统一格式化工具类 * */public class ResultUtil {/** * 数据交互成功返回 * @param object json返回的数据 * */public static Result success(Object object){if(object==null){object = "";}return new Result(ResultEnum.SUCCESS.getCode(),ResultEnum.SUCCESS.getMsg(),object);}/** * 数据交互  * */public static Result notFound(){return  new Result(ResultEnum.NOT_FOUND.getCode(),ResultEnum.NOT_FOUND.getMsg(),"");}/** * 参数异常  * */public static Result parameterError(){return new Result(ResultEnum.PARAMETER_ERROR.getCode(),ResultEnum.PARAMETER_ERROR.getMsg(),"");}/** * 系统异常  * */public static Result systemError(){return new Result(ResultEnum.ERROR.getCode(),ResultEnum.ERROR.getMsg(),"");}}


编写一个判断异常的方法工具类

import java.util.List;import com.jeecms.cms.entity.back.ResultEnum;import com.jeecms.common.exception.NotFoundException;import com.jeecms.common.exception.ParameterException;/** * @author Stopping *  * 返回结果集对参数,结果判断的方法 * */public class ResultMethodUtil {/** * 判断Integer类型的参数是否为空,为空则抛出参数异常 * @param intergers * */public static void judgeIntegerNull(Integer...integers)throws Exception{if ( integers==null || integers.length == 0) {throw new ParameterException(ResultEnum.PARAMETER_ERROR);}for(Integer i : integers){if(i==null){throw new ParameterException(ResultEnum.PARAMETER_ERROR);}}}/** * 判断String类型的参数是否为空,为空则抛出参数异常 * @param value * */public static void judgeStringNull(String...value)throws Exception{for(String i : value){if(i=="" || i==null ||"".equals(i)){throw new ParameterException(ResultEnum.PARAMETER_ERROR);}}}/** * 判断返回值是否为空 * */public static void judgeReturnNull(Object o){if(o instanceof List){if(((List) o).size()==0 || o==null){throw new NotFoundException(ResultEnum.NOT_FOUND);}}else{if(o==null || o.equals("") ){throw new NotFoundException(ResultEnum.NOT_FOUND);}}}}

编写自定义异常类,用于统一异常处理(统一异常处理可参考 SpringMVC统一异常处理:点击打开链接)

import com.jeecms.cms.entity.back.ResultEnum;public class ParameterException extends RuntimeException{private Integer code;public ParameterException(ResultEnum r) {super(r.getMsg());this.code = r.getCode();}public Integer getCode() {return code;}public void setCode(Integer code) {this.code = code;}}


捕获异常处理
import java.io.IOException;import java.io.PrintWriter;import java.util.HashMap;import java.util.Map;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.web.servlet.HandlerExceptionResolver;import org.springframework.web.servlet.ModelAndView;import com.alibaba.fastjson.JSON;import com.jeecms.common.util.ResultUtil;import com.jeecms.common.web.ResponseUtils;public class HandleException implements HandlerExceptionResolver{private final static Logger logger = LoggerFactory.getLogger(HandleException.class);@Overridepublic ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handle,Exception ex) {/** 参数异常 */if(ex instanceof ParameterException){ResponseUtils.renderJson(response,JSON.toJSONString(ResultUtil.parameterError()));return null;}/** 空值异常 */else if(ex instanceof NotFoundException){ResponseUtils.renderJson(response,JSON.toJSONString(ResultUtil.notFound()));return null;}/** 未知异常 */else{logger.error("系统异常",ex);ResponseUtils.renderJson(response,JSON.toJSONString(ResultUtil.systemError()));return null;}}}


最终通过阿里的json工具包转换为json格式,发送给调用者。

ResponseUtils.renderJson(response, JSON.toJSONString(ResultUtil.success(columns)));


效果:






原创粉丝点击