https://blog.csdn.net/erbao_2014/article/details/53688934

问题描述
在开发过程中,由于接口文档的描述,要求json字符串的key首字母为大写,而java 的规范要求在定义bean的时候,成员属性是首字母小写的驼峰格式,java的基本规范一定要遵守,否则会出现一些难以发现解决的基础问题,例如本文中提到的,fastjson转换json字符串key首字母大写的问题。

根本原因: java 的内省机制

内省(Introspector)是Java 语言对Bean类属性、事件的一种缺省处理方法。例如类 A 中有属性 name, 那我们可以通过 getName,setName 来得到其值或者设置新的值。通过 getName/setName 来访问 name 属性,这就是默认的规则。

一个类被当作javaBean使用时,JavaBean的属性是根据方法名推断出来的,它根本看不到java类内部的成员变量,通过去掉set方法前缀,然后取剩余部分,如果剩余部分的第二个字母是小写的,则把剩余部分的首字母改成小写。
参考:http://blog.csdn.net/hahalzb/article/details/5972421

如何解决
在使用fastjson的时候,一般默认对象转换成的字符串key的首字母是小写的,而json字符串转换成java bean对象的时候,json字符串怎么写的,封装javabean的时候就要怎么写,这样才能成功set值给javabean。如果需要将javabean转换json字符串时key的首字母大写可以使用fastjson 的注解 @JSONField,例如:

public class UserSynInfo {
/**
* 用户Id
*
* 作为更新表的主键使用
*/
@JSONField(name="UserId")
private Long userId;
/**
* 用户昵称
*/
@JSONField(name="NickName")
private String nickName;
/**
* 用户的NetId
*/
@JSONField(name="NetId")
private Integer netId;
/**
* 用户加入家庭时间,时间格式为标准时间戳格式,如2016-03-23 11:43:07
*/
@JSONField(name="CreateTime",format="yyyy-MM-dd HH:mm:ss")
private Date createTime;
/**
* 全同步不需要,单条同步需要
*/
@JSONField(name="SN")
private String sN;

/**
* 更新时间,时间格式为标准时间戳格式,如2016-03-23 11:43:07
*/
@JSONField(name="UpdateTime",format="yyyy-MM-dd HH:mm:ss")
private String updateTime;

public Long getUserId() {
return userId;
}
public void setUserId(Long userId) {
this.userId = userId;
}
public String getNickName() {
return nickName;
}
public void setNickName(String nickName) {
this.nickName = nickName;
}
public Integer getNetId() {
return netId;
}
public void setNetId(Integer netId) {
this.netId = netId;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public String getUpdateTime() {
return updateTime;
}
public void setUpdateTime(String updateTime) {
this.updateTime = updateTime;
}
public String getsN() {
return sN;
}
public void setsN(String sN) {
this.sN = sN;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
注意
在使用注解之前,一定要检查自己封装的成员属性的规则是否符合java的基本规范,首字母小写的驼峰格式,否则注解不会生效,不生效的原因,仍然是java的内省机制导致的。
这样在转换的时候就会发现:

{
"CreateTime": "2016-03-23 11:43:07",
"NetId": 123,
"NickName": "你猜",
"UpdateTime": "2016-03-23 11:43:07",
"UserId": 10061
}
1
2
3
4
5
6
7
这样的注解写法不仅仅会在普通的对象转换的时候生效,还可以在spring中生效。

当然,解决json字符串key首字母大写的方式还可以正常定义javabean,将成员属性定义成首字母大写的(虽然不符合javabean的规范),然后使用google的gson,可以将javabean封装的成员属性原封不动的转换成json字符串。

fastjson转换json字符串key的首字母小写变大写的解决办法的更多相关文章

  1. WPS:字母自动变大写的解决办法

    设置中:

  2. C#实体对象序列化成Json并让字段的首字母小写的两种解决方法

    引言:最近在工作中遇到与某些API对接的post的数据需要将对象的字段首字母小写.解决办法有两种:第一种:使用对象的字段属性设置JsonProperty来实现(不推荐,因为需要手动的修改每个字段的属性 ...

  3. fastjson JSON.toJavaObject() 实体类首字母大写属性无法解析问题

    fastjson JSON.toJavaObject() 实体类首字母大写属性无法解析问题

  4. c# MVC返回小驼峰Json(首字母小写)

    1.与前端交互时,前端总希望传过去的json字段名首字母小写,但是.net规范是首字线大写 如果就写了下面的转换方法 /// <summary> /// Poco类字段名转换成首字母小写的 ...

  5. Scala中使用fastJson 解析json字符串

    Scala中使用fastJson 解析json字符串 添加依赖 2.解析json字符 2.1可以通过JSON中的parseObject方法,把json字符转转换为一个JSONObject对象 2.2然 ...

  6. asp.net 获取汉字字符串的拼音首字母,含多音字

    需求:在很多时候数据查询的时候,我们希望输入某个人姓名的拼音首字母进行查询,例如“潘长江”,输入“pcj”,就能搜索潘长江相关信息. 实现: #region 获取汉字转换拼音 首字母 public s ...

  7. java json数据转List对象的集合-----阿里巴巴插件---及原生json---JSON 与 对象 、集合 之间的转换 JSON字符串和java对象的互转【json-lib】

    List<RunfastFullLess> list=(List<RunfastFullLess>)JSONArray.parseObject(activity.getFull ...

  8. C#汉字转拼音(npinyin)将中文转换成拼音全文或首字母

    汉字转拼音貌似一直是C#开发的一个难题,无论什么方案都有一定的bug,之前使用了两种方案. 1.Chinese2Spell.cs 一些不能识别的汉字全部转为Z 2.Microsoft Visual S ...

  9. fastjson生成JSON字符串的时候出现$ref

    fastjson生成JSON字符串的时候出现$ref 转载自:http://wuzhuti.cn/201426!826!05!130202.html 可以通过选项 DisableCircularRef ...

随机推荐

  1. SQLALCHEMY_TRACK_MODIFICATIONS adds significant异常的解决方法

  2. python manage.py runserver指定端口和ip

    python manage.py runserver 0.0.0.0:8000 在本地运行程序,python manager.py runserver打开http://127.0.0.1:5000端口 ...

  3. Bean Shell常用内置变量总结

    JMeter在它的BeanShell中内置了变量,用户可以通过这些变量与JMeter进行交互,其中主要的变量及其使用方法如下: log:写入信息到jmeber.log文件,使用方法:log.info( ...

  4. BZOJ1911 [Apio2010]特别行动队 - 动态规划 - 斜率优化

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 UPD(2018-04-01):用Latex重打了公式…… 题意概括 把一个整数序列划分成任意连续的段,使得划分出 ...

  5. springboot学习——第二集:整合Mybaits

    1,Mybatis动态插入(insert)数据(使用trim标签):https://blog.csdn.net/h12kjgj/article/details/55003713 2,mybatis 中 ...

  6. 044 SimpleDateFormat的线程安全问题与解决方案

    这个问题,以前好像写过,不过现在这篇文章,有一个重现的过程,还是值得读一读的. URL:SimpleDateFormat的线程安全问题与解决方案

  7. group by 和where 条件后面不能用刚设置的别名。

    select count(*),c_xy_bj a from z_user group by c_xy_bj     这个group by后面不能使用c_xy_bj 字段的别名a,只有外面再嵌套sel ...

  8. DT:DT实现根据乳腺肿瘤特征向量高精度预测肿瘤的是恶性还是良性—Jason niu

    %DT:DT实现根据乳腺肿瘤特征向量高精度预测肿瘤的是恶性还是良性 load data.mat a = randperm(569); Train = data(a(1:500),:); Test = ...

  9. Python并发复习3 - 多进程模块 multiprocessing

    python中的多线程其实并不是真正的多线程,如果想要充分地使用多核CPU的资源,在python中大部分情况需要使用多进程.Python提供了非常好用的多进程包multiprocessing,只需要定 ...

  10. RFC2616-HTTP1.1-Header Field Definitions(头字段规定部分—单词注释版)

    part of Hypertext Transfer Protocol -- HTTP/1.1RFC 2616 Fielding, et al. 14 Header Field Definitions ...