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没有的属性自动进行忽略

java后台常用json解析工具问题小结的更多相关文章

  1. 你必须掌握的Java基础:JSON解析工具-json-lib

    一.简介  json-lib是一个Java类库,提供将Java对象,包括beans,maps,collections,java arrays和xml等转换成JSON,或者反向转换的功能. 二.准备 在 ...

  2. Java:JSON解析工具-org.json

    一.简介 org.json是Java常用的Json解析工具,主要提供JSONObject和JSONArray类,现在就各个类的使用解释如下. 二.准备 1.在使用org.json之前,我们应该先从该网 ...

  3. JSON 解析工具的封装(Java)

    JSON 解析工具的封装(Java) 一直想有一个属于自己的JSON工具,今天终于弄好了..... 1.添加pom依赖包 <!--json解析--> <dependency> ...

  4. Json解析工具Jackson(使用注解)

    原文http://blog.csdn.net/nomousewch/article/details/8955796 接上一篇文章Json解析工具Jackson(简单应用),jackson在实际应用中给 ...

  5. JSON解析工具-org.json使用教程

    转自:http://www.open-open.com/lib/view/open1381566882614.html 一.简介  org.json是Java常用的Json解析工具,主要提供JSONO ...

  6. 常用json解析库比较及选择 fastjson & gson

    一.常用json解析库比较及选择 1.简介 fastjson和gson是目前比较常用的json解析库,并且现在我们项目代码中,也在使用这两个解析库. fastjson 是由阿里开发的,号称是处理jso ...

  7. fastJson java后台转换json格式数据

    什么事JSON? JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. 易于人阅读和编写.同时也易于机器解析和生成. 它基于JavaScript Progra ...

  8. 自定义Json解析工具

    此博客为博主原创文章,转载请标明出处,维权必究:https://www.cnblogs.com/tangZH/p/10689536.html fastjson是很好用的json解析工具,只可惜项目中要 ...

  9. JSON解析工具比较,主要GSON和FastJSON

    JSON解析工具比较,主要GSON和FastJSON 一 .各个JSON技术的简介和优劣 1.json-lib json-lib最开始的也是应用最广泛的json解析工具,json-lib 不好的地方确 ...

随机推荐

  1. 利用Java手写简单的httpserver

    前言: 在看完尚学堂JAVA300中讲解如何实现一个最简单的httpserver部分的视频之后, 一.前置知识 1.HTTP协议 当前互联网网页访问主要采用了B/S的模式,既一个浏览器,一个服务器,浏 ...

  2. C# 利用反射动态给模型Model 赋值

    https://www.cnblogs.com/waitingfor/articles/2220669.html object ff = Activator.CreateInstance(tt, nu ...

  3. [译]RabbitMQ教程C#版 - 发布订阅

    先决条件 本教程假定 RabbitMQ 已经安装,并运行在localhost标准端口(5672).如果你使用不同的主机.端口或证书,则需要调整连接设置. 从哪里获得帮助 如果您在阅读本教程时遇到困难, ...

  4. Python汉诺塔

    import turtle class Stack: def __init__(self): self.items = [] def isEmpty(self): return len(self.it ...

  5. Linux——高效玩转命令行

    [0]统计文件or压缩文件的行数 zcat file.gz | sed -n '$='   #迅速.直接打印出多少行.-n 取消默认的输出,使用安静(silent)模式    '$='  不知道是什么 ...

  6. springboot2.0 JPA配置自定义repository,并作为基类BaseRepository使用

    springboot2.0 JPA配置自定义repository,并作为基类BaseRepository使用 原文链接:https://www.cnblogs.com/blog5277/p/10661 ...

  7. dvi接口介绍

    Most graphics cards and motherboards feature a Digital Video Interface (DVI) connector for connectin ...

  8. 外排序 External sorting

    2019-04-17 18:11:34 外排序(External sorting)是指能够处理极大量数据的排序算法.通常来说,外排序处理的数据不能一次装入内存,只能放在读写较慢的外存储器(通常是硬盘) ...

  9. Java8:Lambda表达式增强版Comparator和排序

    1.概述 在这篇教程里,我们将要去了解下即将到来的JDK 8(译注,现在JDK 8已经发布了)中的Lambda表达式——特别是怎样使用它来编写Comparator和对集合(Collection)进行排 ...

  10. 一个SQL语句的优化(sqlserver)

    最早的写法: WITH T AS ( end as Flag FROM YM WHERE Col_076 BETWEEN '2018-07-25' AND '2018-08-03' AND Col_4 ...