FastJson中@JSONField注解使用FastJson中@JSONField注解使用

FastJson中@JSONField注解使用

我们通常使用json格式在服务器之间进行数据传输。

如果json格式数据不符合Java中的标准驼峰式变量定义规则,并且难以理解,这个时候就需要在后台中做二次处理,将数据处理成我们系统中定义的格式。

由于json中的key与bean中的属性不能匹配,通常的转换会出现了部分属性为null的情况。

这种情况,我们可以使用@JSONField。

@JSONField的作用对象:

  1. Field
  2. Setter 和 Getter方法

注:FastJson在进行操作时,是根据getter和setter的方法进行的,并不是依据Field进行。

代码示例:

    @JSONField(name = "reason_clear_time", format = "yyyy-MM-dd HH:mm:ss.S")
    public void setReasonClearTime(Date reasonClearTime) {
        this.reasonClearTime = reasonClearTime;
    }

我们的 POJO 属性字段是reasonClearTime,但是我们需要解析的 json 字符串中的 key 是reason_clear_time, 我们通过使用

@JSONField(name = "reason_clear_time", format = "yyyy-MM-dd HH:mm:ss.S")

实现了映射。

另外,format是数据解析的格式。也就是说,reason_clear_time字段的字符串格式是:

2017-09-01 09:47:57.1

转换成 Date 类型。

json字符串解析代码:

   public void job() {
        String json = PmHitchClient.queryHitchOnline();
        List<Hitch> list = null;
        try {
            list = JSON.parseArray(json, Hitch.class);
            logger.info("PmHitchList ===> {}", list);
            if (null != list && list.size() > 0) {
                for (Hitch h : list) {
                    setGroupDate(h);
                    hitchService.save(h);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void setGroupDate(Hitch h) {
        String groupDate = "W1 2000-01";
        Date catchTime = h.getCatchTime();
        String yearMonth = new SimpleDateFormat("yyyy-MM").format(catchTime);
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(catchTime);
        int weekOfMonth = calendar.get(Calendar.WEEK_OF_MONTH);
        groupDate = "W" + weekOfMonth + " " + yearMonth;
        h.setGroupDate(groupDate);
    }

根据某个字段进行增量更新的代码

@Service
public class HitchServiceImpl implements HitchService{
    @Autowired
    HitchMapper hitchMapper;
    @Override
    public void save(Hitch record) {
        Long hid = record.getHitchId();
        if(null!=hid) {
            Hitch hitch = hitchMapper.selectByHitchId(hid);
            record.setId(hitch.getId());
            if (hitch != null) { // 如果该hitch_id 存在记录,更新之
                hitchMapper.updateByPrimaryKeySelective(record);
            } else {
                hitchMapper.insertSelective(record);
            }
        }
    }
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏青玉伏案

算法与数据结构(一) 线性表的顺序存储与链式存储(Swift版)

温故而知新,在接下来的几篇博客中,将会系统的对数据结构的相关内容进行回顾并总结。数据结构乃编程的基础呢,还是要不时拿出来翻一翻回顾一下。当然数据结构相关博客中我...

21970
来自专栏小灰灰

Java容器篇小结之List自问自答

I. List篇 0. 什么是List 看到这个有点懵逼,一时还真不知道怎么解释,能让完全没有接触过的人都能听懂 列表,什么是列表呢? 好比你到了一个村里,看...

22480
来自专栏LanceToBigData

Java集合源码分析(三)Vevtor和Stack

前言   前面写了一篇关于的是LinkedList的除了它的数据结构稍微有一点复杂之外,其他的都很好理解的。这一篇讲的可能大家在开发中很少去用到。但是有的时候也...

25960
来自专栏软件开发 -- 分享 互助 成长

二分查找

二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列...

21970
来自专栏xingoo, 一个梦想做发明家的程序员

20120918-向量实现《数据结构与算法分析》

#include <iostream> #include <list> #include <string> #include <vector> #include...

22760
来自专栏Android机动车

数据结构学习笔记——队列

线性表有顺序存储和链式存储,栈是线性表,所以有这两种存储方式。同样,队列作为一种特殊的线性表,也同样存在这两种存储方式。

5810
来自专栏java达人

快速失败Vs安全失败(Java迭代器附示例)

译者:java达人-卍极客 英文出处:Java Concept Of The Day 英文链接:http://javaconceptoftheday.com/...

23770
来自专栏Lambda

Java 常见内存溢出异常与代码实现

Java 堆 OutOfMemoryError Java 堆是用来存储对象实例的, 因此如果我们不断地创建对象, 并且保证 GC Root 和创建的对象之间...

21380
来自专栏WindCoder

Java漫谈-容器

除并发应用,Queue在Java SE5中仅有两个实现 LinkedList和PriorityQueue,差异在于排序行为,而不是性能。

8810
来自专栏ACM算法日常

Bessie的好牌(队列)- POJ 3629

Bessie is playing a card game with her N-1 (2 ≤ N ≤ 100) cow friends using a dec...

12830

扫码关注云+社区

领取腾讯云代金券