json字符串转java对象
今天遇到一个问题,前端ajax获取到一个javaBean对象,好多方法发ajax请求需要把这个对象再传到后端,后端再根据这个对象进行操作(之前计划传递id,但发现传递id的话,后端多个方法都需要根据id查询数据库获取这个javaBean,因此就修改为直接传递javaBean),这就涉及到了json字符串与java对象转化,特此记录一下。大概有两种方式比较方便:
一、Gson的方式
二、json-lib的方式
1.前端jquery把对象转为json字符串
"dclLine":JSON.stringify(selectedDclLine);

2.后端Gson转java对象
/**
*
* @return
*/
@RequestMapping("/getDayCharge")
@ResponseBody
public List<Object> getDayCharge(HttpServletRequest request){
Map<String, Object> params = new HashMap<String, Object>(16);
//前端左侧树回路信息
String dclLineStr = request.getParameter("dclLine");
Gson gson = new Gson();
//Gson转换json字符串到java对象
DclLine dclLine = gson.fromJson(dclLineStr, DclLine.class);
params.put("dclLine", dclLine);
List<Object> result = runningReportsService.getDayCharge(params);
return result;
}
转换过程报错:
threw exception [Request processing failed; nested exception is
com.google.gson.JsonSyntaxException: java.lang.NumberFormatException: empty String] with root cause
比较了下json数据与javaBean的类型发现javaBean定义的类型是Double,json数据是"",类型转换报错了


把javaBean中的Double类型改为String类型后,转换成功

但是改javaBean类型涉及改动太大,
在不改变javaBean类型的情况下,试着用json-lib转换了下,发现json-lib转换不报错
3.后端使用json-lib把json字符串转为java对象
/**
* 日用电负荷
* @return
*/
@RequestMapping("/getDayCharge")
@ResponseBody
public List<Object> getDayCharge(HttpServletRequest request){
Map<String, Object> params = new HashMap<String, Object>(16);
//前端左侧树回路信息
String dclLineStr = request.getParameter("dclLine");
JSONObject json = JSONObject.fromObject(dclLineStr);
DclLine dclLine = (DclLine) JSONObject.toBean(json, DclLine.class);
params.put("dclLine", dclLine);
List<Object> result = runningReportsService.getDayCharge(params);
return result;
}

4.pom配置:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.7</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
</dependency>
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.2.3</version>
<classifier>jdk15</classifier>
</dependency>
5.总结:
Gson:
String dclLineStr = request.getParameter("dclLine");//获取到json字符串
Gson gson = new Gson();//com.google.gson.Gson
//Gson转换json字符串到java对象
DclLine dclLine = gson.fromJson(dclLineStr, DclLine.class);
json-lib:
String dclLineStr = request.getParameter("dclLine");//获取到json字符串
JSONObject json = JSONObject.fromObject(dclLineStr);//net.sf.json.JSONObject
DclLine dclLine = (DclLine) JSONObject.toBean(json, DclLine.class);
6.参考博客:
https://blog.csdn.net/chenbin520/article/details/8776915
https://www.cnblogs.com/echo-ling/p/8097698.html
https://blog.csdn.net/a77979744/article/details/53695621
https://blog.csdn.net/tanga842428/article/details/54864485
json字符串转java对象的更多相关文章
- JSON字符串与java对象的转换
所需的jar包: 1.commons-lang.jar 2.commons-beanutils.jar 3.commons-collections.jar 4.commons-logging.jar ...
- JSON 字符串 与 java 对象的转换
jsonLib 经典文章:http://json-lib.sourceforge.net/xref-test/net/sf/json/TestJSONObject.html // 引入相应的包 //j ...
- Json字符串转换为java对象的各种实现方法【json_lib框架、Gson、org.json】
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://mengzhengbin520.blog.51cto.com/7590564/12 ...
- Json对象与Json字符串的转化、JSON字符串与Java对象的转换
一.Json对象与Json字符串的转化 1.jQuery插件支持的转换方式: $.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符 ...
- Json对象与Json字符串的转化、JSON字符串与Java对象的转换(转)
一.Json对象与Json字符串的转化 1.jQuery插件支持的转换方式: $.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符 ...
- json字符串与java对象的相互转换(jackson)
1.java对象转换为json字符串 package com.chichung.json; import com.fasterxml.jackson.core.JsonProcessingExcept ...
- Java中JSON字符串与java对象的互换实例详解
这篇文章主要介绍了在java中,JSON字符串与java对象的相互转换实例详解,非常不错,具有参考借鉴价值,需要的朋友可以参考下 在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JS ...
- Json——使用Json jar包实现Json字符串与Java对象或集合之间的互相转换
总结一下利用Json相关jar包实现Java对象和集合与Json字符串之间的互相转换: 1.创建的User类: package com.ghj.packageofdomain; public clas ...
- java json数据转List对象的集合-----阿里巴巴插件---及原生json---JSON 与 对象 、集合 之间的转换 JSON字符串和java对象的互转【json-lib】
List<RunfastFullLess> list=(List<RunfastFullLess>)JSONArray.parseObject(activity.getFull ...
随机推荐
- [SDOI2010]地精部落[计数dp]
题意 求有多少长度为 \(n\) 的排列满足 \(a_1< a_2> a_3 < a_4 \cdots\) 或者 $a_1> a_2 < a_3 > a_4\cdo ...
- 如何在Windows Server 2003搭建Windows+iis+asp+access环境
前提系统盘镜像要加载进来方案一:开始->管理您的服务器->添加或删除角色->下一步->自定义配置->下一步->选择应用程序服务器(IIS,ASP.NET)-> ...
- Scrapy框架中的CrawlSpider
小思考:如果想要通过爬虫程序去爬取”糗百“全站数据新闻数据的话,有几种实现方法? 方法一:基于Scrapy框架中的Spider的递归爬取进行实现(Request模块递归回调parse方法). 方法二: ...
- MiniNet自定义拓扑
SDN 与 Mininet 概述 SDN 全名为(Software Defined Network)即软件定义网络,是现互联网中一种新型的网络创新架构,其核心技术 OpenFlow 通过网络设备控制面 ...
- anoconda 神经网络 相关操作
1. conda 相关操作 建立新环境:conda crearte -n NewName python=版本(3.6) 激活环境:conda activate NewName 关闭环境:conda d ...
- C++ new和delete 堆和栈
一.new和delete基本用法 程序开发中内存的动态分配与管理永远是一个让C++开发者头痛的问题,在C中,一般是通过malloc和free来进行内存分配和回收的,在C++中,new和delete已经 ...
- C++:同名隐藏和赋值兼容规则
一.同名隐藏 同名隐藏,即在C++的继承中,只要子类的函数名和父类的函数名相同,子类中的函数将会隐藏所有父类中和子类的成员函数同名的函数 特别注意: 和函数之间的重载不同,这里只要求函数的名字相同,而 ...
- 软件工程课程设计——第一个Spring
开发会议框架表格: 1.我们团队Reborn针对需求功能进行热烈的讨论会议,从功能的方面分析开发,结合在一起组合为App软件,再另外思考附加的功能性娱乐项目. 2.开发过程中,以表格的形式反思开发过程 ...
- PAT 甲级 1029 Median
https://pintia.cn/problem-sets/994805342720868352/problems/994805466364755968 Given an increasing se ...
- 关于vue-eslint自动补全代码,以及自动生成雪碧图
一.配置eslint module.exports={ "printWidth": 240, //一行的字符数,如果超过会进行换行,默认为80 "tabWidth&quo ...