关于fastjson在序列化成JSON串时字段增加的问题
今天在项目中遇到控制器中返回的对象经过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串时字段增加的问题的更多相关文章
- C#实体对象序列化成Json并让字段的首字母小写的两种解决方法
引言:最近在工作中遇到与某些API对接的post的数据需要将对象的字段首字母小写.解决办法有两种:第一种:使用对象的字段属性设置JsonProperty来实现(不推荐,因为需要手动的修改每个字段的属性 ...
- C#将对象序列化成JSON字符串
C#将对象序列化成JSON字符串 public string GetJsonString() { List<Product> products = new List<Product& ...
- SpringMVC将表单对象序列化成Json字符串提交,以List接收
出自:http://blog.csdn.net/m0_37595732/article/details/71440853 HTML <%@ page language="java&qu ...
- C#中类的字段或属性不被序列化成JSON或XML
将一个类序列化成JSON或XML时,如果某个字段或属性不想被序列化,则可以使用以下Attribute: 1.[Newtonsoft.Json.JsonIgnore]特性:使用Newtonsoft.Js ...
- 将序列化成json格式的日期(毫秒数)转成日期格式
<script> $(function () { loadInfo(); }) function loadInfo() { $.post("InfoList.ashx" ...
- 类对象序列化为json串,json串反序列化为类对象
1.类对象序列化为json串: 方法一: class P(object): def __init__(self,name,age,sex): self.name=name self.age=age s ...
- OrderedDict 有序字典以及读取json串时如何保持原有顺序
1. OrderedDict 有序字典 OrderedDict是dict的子类,它记住了内容添加的顺序.比较时,OrderedDict要内容和顺序完全相同才会视为相等 import collectio ...
- 使用 EntityFramework后把一个对象序列化成json字符串引起循环引用的问题
先看一个T4模板生成的model实体类 著作权归作者所有. 商业转载请联系作者获得授权,非商业转载请注明出处. 作者:卷猫 链接:http://anneke.cn/ArticleInfo/Detial ...
- IOS开发之把 Array 和 Dictionaries 序列化成 JSON 对象
1 前言通过 NSJSONSerialization 这个类的 dataWithJSONObject:options:error:方法来实现,Array 和 dictionary 序列化成 JSON ...
随机推荐
- 1045 Favorite Color Stripe (30分)(简单dp)
Eva is trying to make her own color stripe out of a given one. She would like to keep only her favor ...
- 1037 Magic Coupon (25分)
The magic shop in Mars is offering some magic coupons. Each coupon has an integer N printed on it, m ...
- CSS躬行记(4)——浮动形状
CSS规范新增了一个模块:CSS Shapes,shape-outside属性属于该模块,它能影响浮动元素周边内容流的形状(即浮动形状),可接收三类值:形状盒子.函数和图像. 一.形状盒子 形状盒子( ...
- echarts以地图形式显示中国疫情情况实现点击省份下钻
首先要导入对应的包.下钻用到各个省份的json文件等内容导入之后进行相关的操作. 首先是从数据库中读取相应的数据文件.通过list方式.只有在ser出转化为json文件.在jsp页面通过ajax来进行 ...
- linux中的隐藏权限,chattr,lsattr
chattr chattr可以用来制约root的权限,使得系统更加安全. 主要参数: a:让文件或目录仅供附加用途. b:不更新文件或目录的最后存取时间. c:将文件或目录压缩后存放. d:将文件或目 ...
- mysql报错: unknown variable 'sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES'
在修改mysql默认字符集的时候: 1. 需要拷贝/usr/share/mysql下的my-huge.cnf 或者my-small.cnf到 /etc/my.cnf,但是官网说:从5.7.18开始不在 ...
- AJ学IOS 之二维码学习,快速生成二维码
AJ分享,必须精品 二维码是一项项目中可能会用到的,iOS打开相机索取二维码的速度可不是Android能比的...(Android扫描二维码要来回来回晃...) 简单不多说,如何把一段资料(网址呀,字 ...
- c++ 启发式搜索解决八数码问题
本文对八数码问题 启发式搜索 (C++)做了一点点修改 //fn=gn+hn #include<iostream> #include<queue> #include<st ...
- matlab操作Excel数据
sheet是Excel的表格,xIRange是表格的列的范围 指定xlRange,例如使用语法'C1:C2',其中C1和C2是定义要读取的区百域的两个度相对的角. 例如,'D2:H4'表示工作表上的两 ...
- paddlehub Test on win10
conda 构建虚拟环境 1)虚拟环境下安装paddlepaddle 1.7 2)pip install paddlehub 3)添加环境变量hub_home,以免模型把c盘撑爆 4)下载的模型在.p ...