处理json,将接口返回的数据转成list<T>,和几个时间处理方法的工具类

  1. 接口或者其他方式返回json格式,也可以直接处理里边只有list的json数据
java 复制代码
//第一种json格式,包含分页信息
{
    "code": 200,
    "msg": null,
    "data": {
        "records": [
            {
                "风速": "0.0",
                "电流": "-100.00",
                "数据时间": "2025-03-21 14:04:05"
            },
            {
                "风速": "0.0",
                "电流": "-100.00",
                "数据时间": "2025-03-21 14:07:07"
            },
            {
                "风速": "23.00",
                "电流": "-100.00",
                "数据时间": "2025-03-21 14:06:05"
            }
        ],
        "total": 5,
        "size": 10,
        "current": 1,
        "orders": [],
        "optimizeCountSql": true,
        "searchCount": true,
        "countId": null,
        "maxLimit": null,
        "pages": 1
    }
}
//需要先获取到records这一层的数据,获取方法:
//调取接口数据
Result<?> listByPaging = apiController.getListByPaging(util);
//获取到data这一层的数据
String oldData = listByPaging.getData().toString();
//将其转成jsonObject对象
JSONObject jsonObject = JSONObject.parseObject(oldData);
//再获取records这一层数据,此处的数据就将是我们最后用于转成list的数据
String data = jsonObject.get("records").toString();

//第二种json格式,不包含分页,那么只需要在上边的的开始只获取oldData这一层数据即可。

//注:我们不仅可以把数据转成list,可以转成好多种类
  1. 处理数据类及方法,T就是要转成list后的对应实体类的泛型
java 复制代码
public class PersonEnvironmentDataUtil<T> {

    public List<T> getDataList(String data, Class<T> tClass) {
        List<T> o = null;
        try {
            ObjectMapper objectMapper = new ObjectMapper();
            TypeFactory typeFactory = objectMapper.getTypeFactory();
            JavaType collectionType = typeFactory.constructCollectionType(List.class, tClass);
            //下边是直接将数据处理成Result<?>这种格式,好处在于不需要上边的处理,我们直接把接口放回的数据放进来就可以,缺点在于分页的不好处理
//            JavaType javaType = typeFactory.constructParametricType(Result.class, collectionType);
            List<T> result = objectMapper.readValue(data, collectionType);
            o = result;
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        return o;
    }
  1. 其他一些时间处理工具方法
java 复制代码
/**
     * 获取今天之前i天的日期
     *
     * @param i
     * @return
     */
    public static String getDateWithBefore(int i) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date date = org.apache.commons.lang3.time.DateUtils.addDays(new Date(), -i);
        return sdf.format(date) + " 00:00:00";
    }

    /**
     * 获取3分钟之前时间
     *
     * @return
     */
    public static String get3MinBefore(String time) {
        SimpleDateFormat sdf = null;
        Date beforeD = null;
        try {
            sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date parse = sdf.parse(time);
            Calendar beforeTime = Calendar.getInstance();
            beforeTime.setTime(parse);
            beforeTime.add(Calendar.MINUTE, -3);// 3分钟之前的时间
            beforeTime.add(Calendar.SECOND, +1); //1秒后
            beforeD = beforeTime.getTime();
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return sdf.format(beforeD);
    }

    /**
     * 获取一天前时间
     *
     * @return
     */
    public static String get1DayBefore(String time) {
        SimpleDateFormat sdf = null;
        Date beforeD = null;
        try {
            sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date parse = sdf.parse(time);
            Calendar beforeTime = Calendar.getInstance();
            beforeTime.setTime(parse);
            beforeTime.add(Calendar.DAY_OF_MONTH, -1);// 1天前
            beforeTime.add(Calendar.SECOND, +1); //1秒后
            beforeD = beforeTime.getTime();
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return sdf.format(beforeD);
    }

    /**
     * 获取一周前时间
     *
     * @return
     */
    public static String get1WeekBefore(String time) {
        SimpleDateFormat sdf = null;
        Date beforeD = null;
        try {
            sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date parse = sdf.parse(time);
            Calendar beforeTime = Calendar.getInstance();
            beforeTime.setTime(parse);
            beforeTime.add(Calendar.WEEK_OF_YEAR, -1);// 1周前
            beforeD = beforeTime.getTime();
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return sdf.format(beforeD);
    }
相关推荐
xcl09251 小时前
幼儿托育系统开发实战:从需求分析到上线全流程指南
java·大数据·需求分析
吴声子夜歌1 小时前
ApacheCommons——commons-cli(命令行参数解析)
java·开发语言·apache
小小猪的春天1 小时前
Java 手写第一个 MCP Server:Spring AI MCP 半小时跑通
java·人工智能·spring boot·ai编程
find1star1 小时前
LeetCode 141:环形链表
java·算法·leetcode·链表
今天AI了吗2 小时前
DeepSeek Harness 深度解析:从评测架构到实战落地
java·网络·数据库·人工智能·架构·java-ee
许彰午2 小时前
27-AuthService登录链路
java·低代码·架构
泡海椒2 小时前
JQuick-Curl 性能分析:并发场景下的性能表现与调优,第三方接口调用不只要快写也要稳跑
java·开发语言·okhttp
Rain的Java大神之路3 小时前
JavaWeb开发如何解决跨域问题
java·前端·后端·nginx·web安全·面试·运维开发
自动化监测Learner4 小时前
Navicat Premium 17 中文版安装教程(2026最新版)
java·linux·数据库
那个松鼠很眼熟w4 小时前
4.Spring-Ai入门案例
java·人工智能·spring