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 条评论
登录 后参与评论

相关文章

来自专栏Create Sun

基础拾遗------委托详解

前言:   C# 中的委托(Delegate)类似于 C 或 C++ 中函数的指针。委托是存有对某个方法的引用的一种引用类型变量。引用可在运行时被改变。委托(D...

3008
来自专栏无题

Java实现动态代理

无边落木潇潇下 Java实现动态代理的大致步骤如下: 1.定义一个委托类和公共接口 1 2 3 4 5 6 7 8 9 10 11 //公共接口 publi...

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

装饰模式

一、相关介绍 1、装饰模式是为已有功能动态地添加更多功能的一种方式。 2、举例:QQ中的服装秀可以动态的搭配不同的服饰来进行修饰。 3、UML图 ? 4、所属类...

1759
来自专栏java初学

spring框架(1)— 依赖注入

44512
来自专栏余林丰

组合模式

在之前有接触过组合模式,那是第一次接触设计模式,觉得什么是组合模式啊?什么部分与整体。现在再来看组合模式,觉得实际上并没有那么神秘。 组合模式:将对象组合成树形...

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

ER模型到关系模型的转换规则

E-R模型向关系模型的转换规则: 一、两元联系的转换规则 (1)实体类型的转换  将每个实体类型转换成一个关系模式,实体的属性即为关系的属性,实体标识符即为关系...

1876
来自专栏猿人谷

strcpy函数

1 #include<stdio.h> 2 #include <assert.h> 5 void myStrcpy(char* Dest, cons...

1847
来自专栏Python

SQLAlchemy中的自引用

SQLALCHEMY采用adjacency list pattern来表示类的自引用。 例如,对于类Node自引用: class Node(Base): ...

3435
来自专栏开发与安全

从零开始学C++之STL(十):迭代器适配器{(插入迭代器back_insert_iterator)、IO流迭代器(istream_iterator、ostream_iterator)}

一、迭代器适配器 反向迭代器 插入迭代器 IO流迭代器 其中反向迭代器可以参考以前的文章。 二、插入迭代器 插入迭代器实际上是一个输出迭代器(*it=...

1900
来自专栏函数式编程语言及工具

Scalaz(19)- Monad: \/ - Monad 版本的 Either

  scala标准库提供了一个Either类型,它可以说是Option的升级版。与Option相同,Either也有两种状态:Left和Right,分别对应Op...

2755

扫码关注云+社区