package com.dsj.gdbd.utils.ajax;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper; import java.io.Serializable;
import java.util.List; /**
* @Description: 自定义响应结构
* @Author: DGBD
* @CreateDate: 2018/12/21 16:27
* @UpdateUser: yc
* @UpdateDate: 2018/12/21 16:27
* @UpdateRemark: 修改内容
* @博客地址: https://www.cnblogs.com/mlq2017/
* @Version: 1.0
*/
public class AjaxResult implements Serializable { // 定义jackson对象
private static final ObjectMapper MAPPER = new ObjectMapper(); /***
* 响应业务状态
*/
private Integer status; /***
* 响应消息
*/
private String msg; /***
* 响应中的数据
*/
private Object data; public static AjaxResult build(Integer status, String msg, Object data) {
return new AjaxResult(status, msg, data);
} public static AjaxResult ok(Object data) {
return new AjaxResult(data);
} public static AjaxResult ok() {
return new AjaxResult(null);
} public AjaxResult() { } public static AjaxResult build(Integer status, String msg) {
return new AjaxResult(status, msg, null);
} public AjaxResult(Integer status, String msg, Object data) {
this.status = status;
this.msg = msg;
this.data = data;
} public AjaxResult(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 AjaxResult formatToPojo(String jsonData, Class<?> clazz) {
try {
if (clazz == null) {
return MAPPER.readValue(jsonData, AjaxResult.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 AjaxResult format(String json) {
try {
return MAPPER.readValue(json, AjaxResult.class);
} catch (Exception e) {
e.printStackTrace();
}
return null;
} /**
* Object是集合转化
*
* @param jsonData json数据
* @param clazz 集合中的类型
* @return
*/
public static AjaxResult 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;
}
} }

自定义响应结构 AjaxResult()的更多相关文章

  1. 自定义响应结构 Json格式转换 工具类

    import java.util.List; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterx ...

  2. 刚开始学python——数据结构——“自定义队列结构“

    自定义队列结构  (学习队列后,自己的码) 主要功能:用列表模拟队列结构,考虑了入队,出队,判断队列是否为空,是否已满以及改变队列大小等基本操作. 下面是封装的一个类,把代码保存在myQueue.py ...

  3. 一个相对通用的JSON响应结构,其中包含两部分:元数据与返回值

    定义一个相对通用的JSON响应结构,其中包含两部分:元数据与返回值,其中,元数据表示操作是否成功与返回值消息等,返回值对应服务端方法所返回的数据. public class Response { pr ...

  4. Spring Security教程(三):自定义表结构

    在上一篇博客中讲解了用Spring Security自带的默认数据库存储用户和权限的数据,但是Spring Security默认提供的表结构太过简单了,其实就算默认提供的表结构很复杂,也不一定能满足项 ...

  5. Http的响应结构

    Http响应结构有三部分组成: Http头部(Http Header):它们包含了更多关于响应的信息.比如:头部可以指定认为响应过期的过期日期,或者是指定用来给用户安全的传输实体内容的编码格式.如何在 ...

  6. c#调用带有自定义表结构的存储过程

    1.新建自定义表结构 CREATE TYPE [dbo].[HBForHBGHDR] AS TABLE( [序号] [int] NULL, [客户编号] [varchar](15) NULL ) GO ...

  7. .NET Core授权失败如何自定义响应信息?

    前言 在.NET 5之前,当授权失败即403时无法很友好的自定义错误信息,以致于比如利用Vue获取到的是空响应,不能很好的处理实际业务,同时涉及到权限粒度控制到控制器.Action,也不能很好的获取对 ...

  8. nginx log_format指令记录自定义响应头

    我们用的nginx有做过一些定制开发,为了调试方便,加了一些自定义的response header,那么如何把这个自定义头记录到日志中以便于观察呢? nginx log_format指令支持这种扩展, ...

  9. Nginx挂载维护页或返回自定义响应信息

    在服务停机升级或者服务暂不可用时,往往希望能够返回给用户更为明确和友好的响应信息.可以通过修改nginx配置文件,达到返回自定义信息的效果.有如下几种配置方式: (1)Nginx接收到的所有请求,都返 ...

随机推荐

  1. hibernate双向一对多映射

    双向多对一 :Customer类------------>一的一端   Order类----------->多的一端 Customer类:(省略set().get()和构造方法) priv ...

  2. C语言中的一个*和[]优先级问题

    最近写着玩了这么一段代码 int Init(int **T, int v1, int v2, int v3) { *sizeof(int)))) exit(-); *T[]=v1, *T[]=v2, ...

  3. go的url解析

    对于解析url,是一个常见的场景,下面就来说这个,直接见代码: package main import ( "fmt" "net/url" "stri ...

  4. 25线程基础-CLR

    由CLR via C#(第三版) ,摘抄记录... 1.线程是CPU的虚拟化,windows为每个进程提供专用线程(CPU)2.线程开销:内存和时间. 线程内核对象—OS为系统中创建的每个线程都分配并 ...

  5. - WebStorm 转载【干货技术贴】之-mac下如何安装WebStorm + 破解

    写在前面 之前公司不忙的时候,用闲暇功夫想学习React-Native 苦于找不到一款好的代码编辑器,在广泛搜索以后,发现最适合的就是网页代码编辑器WebStrom,所以就尝试安装和破解,下面我将自己 ...

  6. Myeclipse 文件注释和解注释

    我用的是myeclipse10.6, 在xml中 注释可以用: ctrl+shift+/ (段落注释) ctrl+shift+c (行注释) 解除注释可以用: ctrl+shift+\ 在proper ...

  7. 浅谈<持续集成、持续交付、持续部署>(二)

    集成是指软件个人研发的部分向软件整体部分交付,以便尽早发现个人开发部分的问题:部署是代码尽快向可运行的开发/测试节交付,以便尽早测试:交付是指研发尽快向客户交付,以便尽早发现生产环境中存在的问题.如果 ...

  8. 【BZOJ4010】[HNOI2015]菜肴制作 拓扑排序

    [BZOJ4010][HNOI2015]菜肴制作 Description 知名美食家小 A被邀请至ATM 大酒店,为其品评菜肴. ATM 酒店为小 A 准备了 N 道菜肴,酒店按照为菜肴预估的质量从高 ...

  9. RMQ with Shifts(线段树)

    RMQ with Shifts Time Limit:1000MS     Memory Limit:65535KB     64bit IO Format:%I64d & %I64u Pra ...

  10. Linux c编程:I/O多路复用之select

    一般我们在写socet程序的时候调用的accept,recv等操作都是阻塞型的.意思就是如果我们一直收不到数据那么则会被阻塞.所谓阻塞方式block,顾名思义,就是进程或是线程执行到这些函数时必须等待 ...