zoukankan      html  css  js  c++  java
  • 获取 exception 对象的字符串形式(接口服务返回给调用者)

    工具类:

    package com.taotao.common.utils;
    
    import java.io.PrintWriter;
    import java.io.StringWriter;
    
    public class ExceptionUtil {
    
        /**
         * 获取异常的堆栈信息(先打印到控制台,再返回字符串形式)
         * 
         * @param t
         * @return
         */
        public static String getStackTrace(Throwable t) {
            StringWriter sw = new StringWriter();
            PrintWriter pw = new PrintWriter(sw);
    
            try {
                t.printStackTrace(pw);
                return sw.toString();
            } finally {
                pw.close();
            }
        }
    }

    使用方法:

    package com.taotao.rest.controller;
    
    import java.util.List;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    import com.taotao.common.pojo.TaotaoResult;
    import com.taotao.common.utils.ExceptionUtil;
    import com.taotao.pojo.TbContent;
    import com.taotao.rest.service.ContentService;
    
    
    @Controller
    @RequestMapping("/content")
    public class ContentController {
        
        @Autowired
        ContentService contentService;
        
        @RequestMapping("/list/{contentCategoryId}")
        @ResponseBody
        public TaotaoResult getContentList(@PathVariable Long contentCategoryId) {
            //因为是提供接口服务,所以要处理异常,以便返回信息给调用者
            try {
                List<TbContent> list = contentService.getContentList(contentCategoryId);
                return TaotaoResult.ok(list);
            } catch (Exception e) {
                return TaotaoResult.build(500, ExceptionUtil.getStackTrace(e));
            }
        }
    
    }

    springMvc Controller层返回结果封装的对象:

    package com.taotao.common.pojo;
    
    import java.util.List;
    
    import com.fasterxml.jackson.databind.JsonNode;
    import com.fasterxml.jackson.databind.ObjectMapper;
    
    /**
     * 淘淘商城自定义响应结构
     */
    public class TaotaoResult {
    
        // 定义jackson对象
        private static final ObjectMapper MAPPER = new ObjectMapper();
    
        // 响应业务状态
        private Integer status;
    
        // 响应消息
        private String msg;
    
        // 响应中的数据
        private Object data;
    
        public static TaotaoResult build(Integer status, String msg, Object data) {
            return new TaotaoResult(status, msg, data);
        }
    
        public static TaotaoResult ok(Object data) {
            return new TaotaoResult(data);
        }
    
        public static TaotaoResult ok() {
            return new TaotaoResult(null);
        }
    
        public TaotaoResult() {
    
        }
    
        public static TaotaoResult build(Integer status, String msg) {
            return new TaotaoResult(status, msg, null);
        }
    
        public TaotaoResult(Integer status, String msg, Object data) {
            this.status = status;
            this.msg = msg;
            this.data = data;
        }
    
        public TaotaoResult(Object data) {
            this.status = 200;
            this.msg = "OK";
            this.data = data;
        }
    
    //    public Boolean isOK() {
    //        return this.status == 200;
    //    }
    
        public Integer getStatus() {
            return status;
        }
    
        public void setStatus(Integer status) {
            this.status = status;
        }
    
        public String getMsg() {
            return msg;
        }
    
        public void setMsg(String msg) {
            this.msg = msg;
        }
    
        public Object getData() {
            return data;
        }
    
        public void setData(Object data) {
            this.data = data;
        }
    
        /**
         * 将json结果集转化为TaotaoResult对象
         * 
         * @param jsonData json数据
         * @param clazz TaotaoResult中的object类型
         * @return
         */
        public static TaotaoResult formatToPojo(String jsonData, Class<?> clazz) {
            try {
                if (clazz == null) {
                    return MAPPER.readValue(jsonData, TaotaoResult.class);
                }
                JsonNode jsonNode = MAPPER.readTree(jsonData);
                JsonNode data = jsonNode.get("data");
                Object obj = null;
                if (clazz != null) {
                    if (data.isObject()) {
                        obj = MAPPER.readValue(data.traverse(), clazz);
                    } else if (data.isTextual()) {
                        obj = MAPPER.readValue(data.asText(), clazz);
                    }
                }
                return build(jsonNode.get("status").intValue(), jsonNode.get("msg").asText(), obj);
            } catch (Exception e) {
                return null;
            }
        }
    
        /**
         * 没有object对象的转化
         * 
         * @param json
         * @return
         */
        public static TaotaoResult format(String json) {
            try {
                return MAPPER.readValue(json, TaotaoResult.class);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    
        /**
         * Object是集合转化
         * 
         * @param jsonData json数据
         * @param clazz 集合中的类型
         * @return
         */
        public static TaotaoResult formatToList(String jsonData, Class<?> clazz) {
            try {
                JsonNode jsonNode = MAPPER.readTree(jsonData);
                JsonNode data = jsonNode.get("data");
                Object obj = null;
                if (data.isArray() && data.size() > 0) {
                    obj = MAPPER.readValue(data.traverse(),
                            MAPPER.getTypeFactory().constructCollectionType(List.class, clazz));
                }
                return build(jsonNode.get("status").intValue(), jsonNode.get("msg").asText(), obj);
            } catch (Exception e) {
                return null;
            }
        }
    
    }
  • 相关阅读:
    stenciljs 学习四 组件装饰器
    stenciljs 学习三 组件生命周期
    stenciljs 学习二 pwa 简单应用开发
    stenciljs ionic 团队开发的方便web 组件框架
    stenciljs 学习一 web 组件开发
    使用npm init快速创建web 应用
    adnanh webhook 框架 hook rule
    adnanh webhook 框架 hook 定义
    adnanh webhook 框架request values 说明
    adnanh webhook 框架execute-command 以及参数传递处理
  • 原文地址:https://www.cnblogs.com/libin6505/p/9723802.html
Copyright © 2011-2022 走看看