fastjson如何序列化非JavaBean规范的实体类?

优秀良民 发布于 2017/09/01 17:53
阅读 428
收藏 1

我想使用Accessors模式来代替传统的getset方法对实体类的读写,但后来发觉fastjson是按照实体类中的getset进行序列化的。。。

想知道有啥办法,能够让fastjson支持根据字段相同的方法名,进行序列化。

我想要实现一下效果,如:

User user = new User().id(100).name("张三");
String userJson = JSON.toJSONString(user);

 

加载中
1
如比如比
如比如比

AfterFilter afterFilter = new AfterFilter() {  
    @Override
    public void writeAfter(Object object) {
        writeKeyValue("id", ((User)object).id());
        writeKeyValue("name", ((User)object).name());
    }
};
User user = new User().id(100).name("张三");
String userJson = JSON.toJSONString(user, afterFilter);

结果:
{"id":100,"name":"张三"}

依然菜刀
依然菜刀
回复 @优秀良民 : 用反射或者代理动态生成AfterFilter即可
如比如比
如比如比
回复 @优秀良民 : 不用,可以考虑注解或反射来实现。还是直接getter/setter能简单些。
优秀良民
优秀良民
每个实体类都要提供这个抽象类的实现方法咯?
0
如比如比
如比如比

AfterFilter

如比如比
如比如比
回复 @优秀良民 : 是吗?能贴出User的代码么?
优秀良民
优秀良民
根据你的提示,我找到了下面这篇文章,但是并没能实现我想要的效果,求解! http://www.cnblogs.com/dirgo/p/5178629.html
0
优秀良民
优秀良民

@壶漏子:

class User {

    private Integer id;
    private String name;

    public User id(Integer id) {
        this.id = id;
        return this;
    }

    public Integer id() {
        return this.id;
    }

    public User name(String name) {
        this.name = name;
        return this;
    }

    public String name() {
        return this.name;
    }
}

 

返回顶部
顶部