java后台常用json解析工具问题小结

Wesley13
• 阅读 475

若排版紊乱可查看我的个人博客原文地址

java后台常用json解析工具问题小结

这里不细究造成这些问题的底层原因,只是单纯的描述我碰到的问题及对应的解决方法

jackson将java对象转json字符串字段字母小写问题

在使用springmvc框架作为后台控制层层的框架时,我们都知道当前台发送ajax请求后台要返回一个json字符串时,我们要做3件事

  1. 引入jackson相关jar包
  2. springmvc配置文件配置相关json转换配置
  3. Controller层的方法上加上@Response注解,方法返回值为对象

这样当我们完成第三步,返回java对象之后,springmvc使用jackson将我们的对象转为json返回给前台,一般情况下是任何问题都不会发生的,但是当我们返回的java对象,他的成员变量不符合java驼峰命名规范时,会出现问题,例如当成员变量名全部大写,转化的json对应字段却是小写

java类

 //不符合变量命名规范的java类
public class SellPoint {
        private String WT;
        private String ZT;
    //get/set ......略
}

//加注解之后的java类
public class SellPoint {
  @JsonProperty("WT")
  private String WT;
  @JsonProperty("ZT")
  private String ZT;
   //get/set 方法加@JsonIgnore
}

转化为json后

//不符合变量命名规范的java类转化的json
"sellPoint": {
  "wt": "送20M宽带加电信电视(省内流量不限量,路由器、2部机顶盒免费送,预存400元)",
  "zt": "送2T云存储空间;机顶盒免费用"
}

//加完注解后正常的json
"sellPoint": {
  "WT": "送20M宽带加电信电视(省内流量不限量,路由器、2部机顶盒免费送,预存400元)",
  "ZT": "送2T云存储空间;机顶盒免费用"
}

解决方案:

  1. 在不规范的成员变量字段上加JsonProperty("期望的变量名称")注解
  2. 在对应的get/set方法上添加@JsonIgnore注解,忽略正常的转化

注意:如果不在get/set方法加@JsonIgnore注解,会生成两份json属性,如下:

"sellPoint": {
  "wt": "送20M宽带加电信电视(省内流量不限量,路由器、2部机顶盒免费送,预存400元)",
  "zt": "送2T云存储空间;机顶盒免费用",
  "WT": "送20M宽带加电信电视(省内流量不限量,路由器、2部机顶盒免费送,预存400元)",
  "ZT": "送2T云存储空间;机顶盒免费用"
}

fastjson将对象转化为json字符串首字母小写问题(未实践)

解决方案一:
在Controller或service中初始化fastjson的一个参数(高版本(2.X)fastjson已经不适用)

static{
   TypeUtils.compatibleWithJavaBean = true;
 }

解决方案二:
新建fastjson.properties,添加如下配置

fastjson.compatibleWithJavaBean=true

解决方案三: 在对应字段上加@JSONField注解

//加注解之后的java类
public class SellPoint {
  @JSONField("WT")
  private String WT;
  @JSONField("ZT")
  private String ZT;
   //get/set 忽略
}

ps:net.sf.json将对象转化为json不会出现属性名称问题

net.sf.json的NoSuchMethodException: Unknown property XXXX

这个错是使用net.sf.json将json字符串转化为java对象时出现,出现的原因是Json字符串属性过多,没有对应上javaBean的属性,所以程序会抛异常没有对应的属性。
解决方案是写一个属性过滤器

    JsonConfig config = new JsonConfig();
        config.setJavaPropertyFilter(new PropertyFilter(){
            public boolean apply(Object paramObject1, String paramString,
                    Object paramObject2) {
        //这里设置要过滤的属性
                if(paramString.equals("xxx")||paramString.equals("xxxx")){
                    return false;
                }
                return true;
            }});

这种方式可以参考这篇博客
因为我的json属性过多最终没有采用net.sf.json,使用了fastjson,他在json转java中,对于json中一些java没有的属性自动进行忽略

点赞
收藏
评论区
推荐文章
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Easter79 Easter79
3年前
tomcat7中对http请求的处理过程
原文链接(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fcxis.me%2F2017%2F05%2F05%2Ftomcat7%25E4%25B8%25AD%25E5%25AF%25B9http%25E8%25AF%25B7%25E6%25B1%2582%25E7%259A%2584%25
Wesley13 Wesley13
3年前
IDE、SDK、API
IDE集成开发环境(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fbaike.baidu.com%2Fitem%2F%25E5%25BC%2580%25E5%258F%2591%25E7%258E%25AF%25E5%25A2%2583)(IDE(https://www
Easter79 Easter79
3年前
Tukey‘s test方法 异常值
如何计算异常值(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fzh.wikihow.com%2F%25E8%25AE%25A1%25E7%25AE%2597%25E5%25BC%2582%25E5%25B8%25B8%25E5%2580%25BC)
Wesley13 Wesley13
3年前
CDN帮助网站加速的方法
CDN(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fwww.impervaincapsula.cn%2Fcdn%25E5%2586%2585%25E5%25AE%25B9%25E5%2588%2586%25E5%258F%2591%25E7%25BD%2591%25E7%25BB
Wesley13 Wesley13
3年前
PDO笔记之参数化查询
参数化查询解释在这里:Wiki参数化查询(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fzh.wikipedia.org%2Fwiki%2F%25E5%258F%2583%25E6%2595%25B8%25E5%258C%2596%25E6%259F%25A5%25E8%25A9%25A
Wesley13 Wesley13
3年前
rsync命令 常用工具命令
rsync命令常用工具命令(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fman.linuxde.net%2Fsub%2F%25e5%25b8%25b8%25e7%2594%25a8%25e5%25b7%25a5%25e5%2585%25b7%25e5%2591%25
Stella981 Stella981
3年前
Spring Cloud Gateway 扩展支持多版本控制及灰度发布
灰度发布什么是灰度发布,概念请参考(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fbaike.baidu.com%2Fitem%2F%25E7%2581%25B0%25E5%25BA%25A6%25E5%258F%2591%25E5%25B8%2583%2F7100322
Stella981 Stella981
3年前
Dubbo中消费者初始化过程解析
原文链接(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fcxis.me%2F2017%2F03%2F21%2FDubbo%25E4%25B8%25AD%25E6%25B6%2588%25E8%25B4%25B9%25E8%2580%2585%25E5%2588%259D%25E5%25A
Wesley13 Wesley13
3年前
mysql的复制
若排版紊乱可查看我的个人博客原文地址(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fyangshaoxiang.github.io%2F2017%2F04%2F03%2Fmysql%25E4%25B8%25BB%25E4%25BB%258E%25E5%25A4%258D%25E5%25