fastjson:获取类(Class)的所有可序列化字段(field)

用fastjson对一个类进行序列化时,在没有类的实例只有类的Class的情况下,如果想知道这个Class有所有可以被序列化的字段名,可以用com.alibaba.fastjson.util.TypeUtils.computeGetters(Class<?> clazz, Map<String, String> aliasMap)方法来实现,实现代码很简单:

package net.gdface.facelog.message;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.junit.Test;

import com.alibaba.fastjson.util.FieldInfo;

public class TestFastjson {
    @Test
    public void testComputeGetters(){
        // 返回 Group 类所有可序列化字段信息
        List<FieldInfo> fieldInfo = com.alibaba.fastjson.util.TypeUtils.computeGetters(Group.class, null);
        // 输出字段名和类型
        for(FieldInfo field:fieldInfo){
            System.out.printf("name %s %s\n",field.name,field.fieldType.toString());
        }
    }
    public interface Person<T>{

    }
    public static class User implements Person<String>{

        private Long   id;
        private String name;


        public Long getId() {
            return id;
        }

        public void setId(Long id) {
            this.id = id;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

    }
    public static  class Group {

        private Long       id;
        private String     name;
        private List<User> users = new ArrayList<User>();
        public Date date=new Date();
        public java.sql.Date sqldate=new java.sql.Date(date.getTime());
        public byte[] array=new byte[]{22,33,3,2,3,1,5,-1};
        public String nullStr=null;
        private String privString="private string";
        public Long getId() {
            return id;
        }

        public void setId(Long id) {
            this.id = id;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public List<User> getUsers() {
            return users;
        }

        public void setUsers(List<User> users) {
            this.users = users;
        }

            public void addUser(User user) {
                users.add(user);
            }
    }

}

测试代码运行输出

name array class [B name date class java.util.Date name id class java.lang.Long name name class java.lang.String name nullStr class java.lang.String name sqldate class java.sql.Date name users java.util.List

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏陈树义

Java集合常见面试题集锦

1、介绍Collection框架的结构 集合是Java中的一个非常重要的一个知识点,主要分为List、Set、Map、Queue三大数据结构。它们在Java中的...

4035
来自专栏liulun

30分钟泛型教程

一、泛型入门: 我们先来看一个最为常见的泛型类型List<T>的定义 (真正的定义比这个要复杂的多,我这里删掉了很多东西) [Serializable] pub...

1886
来自专栏曾大稳的博客

c++基础语法

注意:在开发过程中,cpp或者c会被编译为dll或者so供其调用者使用,一般把public的函数定义到h文件,不然调用者都不知道有哪些函数。

963
来自专栏用户3030674的专栏

约瑟夫环(排成圈)

/** * 约瑟夫环问题主要是考虑下标问题,只要解决了下标控制问题,这个题目就不难了 * 在这里我是分成了3中情况: * 1,下标小于剩余人数时:删...

722
来自专栏阮一峰的网络日志

Ramda 函数库参考教程

学习函数式编程的过程中,我接触到了 Ramda.js。 我发现,这是一个很重要的库,提供了许多有用的方法,每个 JavaScript 程序员都应该掌握这个工具。...

6858
来自专栏AILearning

Map集合

Collection |--List:元素是有序的,元素可以重复,因为该集合体系有索引 |--ArrayList:底层的数据结构使用的是数据结构。特点:查询...

2216
来自专栏Android开发指南

12:集合map、工具类

3568
来自专栏Micro_awake web

JavaScript实现八大内部排序算法

? 注:基数排序中:r是关键字的基数,d是长度,n是关键字的个数 1.插入排序 基本思想:在序号i之前的元素(0到i-1)已经排好序,本趟需要找到i对应的元素...

2339
来自专栏Golang语言社区

Go 语言数据类型

在 Go 编程语言中,数据类型用于声明函数和变量。 数据类型的出现是为了把数据分成所需内存大小不同的数据,编程的时候需要用大数据的时候才需要申请大内存,就可以充...

3137
来自专栏CRPER折腾记

JS数组去重!!!一篇不怎么靠谱的"深度"水文

数组去重,这是一个老梗了...今天我又拿出来说了... 我们在考虑全面一点的情况下,数组去重的实现,比如针对NaN,undefined,{}; 这其中涉及的知识...

934

扫码关注云+社区