分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 教程案例

关于fastjson在序列化成JSON串时字段增加的问题

发布时间:2023-09-06 01:51责任编辑:熊小新关键词:jsjson

今天在项目中遇到控制器中返回的对象经过fastjsonMessageConverter转换后,前台收到的json中多了一个字段A的问题。而返回的这个对象中根本就没有定义这个字段A。

查了好久才发现对象中虽然没有这个字段A,但是有个叫做isA()的方法。

原来fastjson在序列化时是根据方法来的,而不是根据字段来的!

既然找到了问题。那么自然就好解决了。可以为这个方法加上@JSONField(serialize=false),让它不参与序列化。

其实最主要的还是在定义对象时,严格按照POJO的规范来。

不过既然出现了问题,我们不妨来测试一下fastjson的序列化的规则。

测试代码:

package com.insanexs.fastjson;import com.alibaba.fastjson.JSON;public class Foo { ???//有set/get方法 ???private String prop1; ???//有操作概属性的方法,但不是set/get方法 ???private String prop2; ???//没有方法直接操作这个属性,由构造函数传入 ???private String prop3; ???private boolean prop4; ???public Foo(){ ???} ???public Foo(String prop1, String prop2, String prop3, boolean prop4){ ???????this.prop1 = prop1; ???????this.prop2 = prop2; ???????this.prop3 = prop3; ???????this.prop4 = prop4; ???} ???public String getProp1() { ???????return prop1; ???} ???public void setProp1(String prop1) { ???????this.prop1 = prop1; ???} ???public String popProp2(){ ???????return prop2; ???} ???public void pushProp2(String prop2){ ???????this.prop2 = prop2; ???} ???//增加了打印,便于了解调用了哪个函数 ???public boolean isProp4(){ ???????System.out.println("invoke isProp4()"); ???????return prop4; ???} ???public boolean getProp4(){ ???????System.out.println("invoke getProp4()"); ???????return prop4; ???} ???//没有对应属性,只有get方法 ???public String getProp5(){ ???????return "4"; ???} ???//没有对应属性,有一个is方法 ???public boolean isProp6(){ ???????return true; ???} ???public static void main(String[] args){ ???????Foo f = new Foo("1","2","3", false); ???????String text = JSON.toJSONString(f); ???????System.out.println(text); ???}}

我们可以看到控制台的输出是:

我们可以看到虽然对象有prop2和prop3,但是因为没有对应的set/get方法,导致属性没有被序列化。而prop5和prop6虽然对象没有直接定义这个属性,但是因为有对应的方法,因此也被序列化输出了。

对于同时存在isXX和getXX的属性,get要先于is方法。如果我们注释了get方法,会发现is方法被调用了。

关于fastjson在序列化成JSON串时字段增加的问题

原文地址:https://www.cnblogs.com/insaneXs/p/8964170.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved