java使用Gson进行json字符串反序列化转map对象时,int变为double的解决办法

java处理json字符串与java对象的互转,google家的Gson是个很好的工具。不过使用中也遇到了一些坑(有的其实更像是惊喜),与大家分享下。

一、json字符串反序列化转map对象时,int变为double的解决办法。

二、json字符串中格式时间字符串与Date对象的直接转换。

三、字符串与枚举的直接转换(自带此功能)。

Gson默认的坑

问题:使用Gsonjson字符串转为map时,原来的int类型反序列化后成为double类型。

Json字符串:

"{\"lngnum\":12,\"dbnum\":12.34,\"datetime\":\"2014-12-23 12:09:21\",\"date\":\"2014-12-23\",
\"next\":{\"lngnum\":12,\"dbnum\":12.34,\"datetime\":\"2014-12-23 12:09:21\",\"date\":\"2014-12-23\"}}";

实现方式:

/**
 * 使用默认的gson对象进行反序列化
 *
 * @param json
 * @param typeToken
 * @return
 */
public static <T> T fromJsonDefault(String json, TypeToken<T> typeToken) {
Gson gson = new Gson();
return gson.fromJson(json, typeToken.getType());
}

转化结果:

lngnum-12.0-Double//整型变为了浮点类型
dbnum-12.34-Double
datetime-2014-12-23 12:09:21-String
date-2014-12-23-String
====================
next-Map start
lngnum-12.0-Double//整型变为了浮点类型
dbnum-12.34-Double
datetime-2014-12-23 12:09:21-String
date-2014-12-23-String
next-Map end
====================

方法一:重新实现TypeAdapter

实现方式:

继续阅读java使用Gson进行json字符串反序列化转map对象时,int变为double的解决办法

Checkstyle-自动化java代码规范检查的eclipse插件安装与使用

一、Checkstyle插件安装

打开eclipse,Help->Eclipse Marketplace->搜索“checkstyle

选择Checkstyle Plug-in->install(进行安装)->一路安装(eclipse会重启一次)。

二、Checkstyle插件配置

a) 插件参数配置

Window->preferences->点击“checkstyle”菜单项 继续阅读Checkstyle-自动化java代码规范检查的eclipse插件安装与使用

程序猿学习之道:官方API+demo+专业论坛

作为程序猿,遇到问题时有发生!遇到问题怎么办?直接百度、谷歌,然后从第一个挨个点,直到找到一个有代码而且最好能用的?

那么说,你还只算是代码的搬运工。

遇到问题肿么办?按方法论来说,就是发现问题–分析问题–解决问题。

在积累了一定的经验后,对于问题的定位已经比较准确,所以第一步做的不再是在百度上搜索一番。而是找到引起这个问题的代码中的对象或者方法,然后去搜索对应的官网,获取对应版本号的文档。

前端的朋友建议多查查w3cschool的api;做后台语言的建议去官网看看文档,比如java的去oracle官网查看对应文档;至于第三方库,就去他们的官网看看帮助文档。

对于要实现的功能是第一次接触的,就看看他们的官方demo,已经在他们的官方论坛里注注水。

当然不少行业大牛的博客也是值得关注的!

memcache与java:ubuntu下memcached服务安装与java客户端(xmemcached)编程

一、ubuntu下memcached服务安装

1.安装Memcache服务端

sudo apt-get install memcached

安装完Memcache服务端以后,我们需要启动该服务:

memcached -d -m 128 -p 11111 -u root

这里需要说明一下memcached服务的启动参数:

-p 监听的端口

-l 连接的IP地址, 默认是本机 

-d start 启动memcached服务 

-d restart 重起memcached服务

-d stop|shutdown 关闭正在运行的memcached服务

-d install 安装memcached服务

-d uninstall 卸载memcached服务 

-u 以的身份运行 (仅在以root运行的时候有效) 

-m 最大内存使用,单位MB。默认64MB 

-M 内存耗尽时返回错误,而不是删除项 

-c 最大同时连接数,默认是1024 

-f 块大小增长因子,默认是1.25

-n 最小分配空间,key+value+flags默认是48 

-h 显示帮助  继续阅读memcache与java:ubuntu下memcached服务安装与java客户端(xmemcached)编程

jsp或者java web的servlet获取get方式提交的数据的几种方式

最近由于工作需要,又重新拾起的java web的开发。之前大体学习过,今儿重新使用,却别有一番滋味。是的,看的更深入了,而不再仅仅是当时那种不明白但会用的状态!
先看源码~
第一个页面:一个可以通过get方式提交数据的页面,可以是普通的url方式:目标url?parameter1=value1&parameter2=value2或者form的get方式提交(其实最终还是转变为上一种方式)。这里使用了form的get方式提交数据:
<form name=”getForm” id=”getForm” action=”/getForm.jsp” method=”get”>
姓名:<input type=”text” name=”name” id=”name” /><br />
年龄:<input type=”text” name=”age” id=”age”><br />
介绍:<textarea name=”description” id=”description”></textarea><br />
<input type=”submit” id=”getList” name=”getList” value=”submit”/>
</form>
解析:这是把表单中的元素以get方式提交给同项目中的getForm.jsp页面,当然也可以是其他网站的jsp页面或者servlet。
第二部分:接收端。这里使用了jsp接收提交的数据。
<%
//获取提交的表单数据
//方式一获取
/*
*普通方法,通过request对象中的getParameter()方法获取需要的数据
*/
String name = request.getParameter(“name”);
String age = request.getParameter(“age”);
String description = request.getParameter(“description”);
//方法二获取
/*
*通过request对象中的getParameterNames()方法获取输入数据的name属性枚举
*通过遍历枚举获取所有name,并利用getParameter()方法获取对应值
*/
Map<String,String> map = new HashMap<String,String>();
Enumeration names = request.getParameterNames();
while(names.hasMoreElements()){
String key = (String)names.nextElement();
String value = request.getParameter(key);
map.put(key, value);
}
//方法三获取
/*
*通过request对象中的getParameterMap()方法获取提交数据的map集合,
*不过要注意的是键值对是String:String[]
*/
Map nextMap = request.getParameterMap();//键是String,值是String[]
//数据输出
PrintWriter pw = response.getWriter();
//方式一打印
pw.println(“name:” + name + “<br />”);
pw.println(“age:” + age + “<br />”);
pw.println(“description:” + description + “<br /><hr />”);
//方法二打印
Set<Entry<String,String>> set = map.entrySet();
Iterator<Entry<String,String>> it = set.iterator();
while(it.hasNext()){
Entry<String,String> entry = (Entry<String,String>)it.next();
String key = entry.getKey();
String value = entry.getValue();
pw.println(key + “:” + value + “<br />”);
}
pw.println(“<hr />”);
//方法三遍历
Set<Entry<String,String[]>> nextSet = nextMap.entrySet();
Iterator<Entry<String,String[]>> nextIt = nextSet.iterator();
while(nextIt.hasNext()){
Entry<String,String[]> entry = (Entry<String,String[]>)nextIt.next();
String key = entry.getKey();
String[] value = entry.getValue();
pw.println(key + “:” + value[0] + “<br />”);
}
%>
解析:以上介绍了三种方式获取数据,第一种是最为常规的方式,当然在获取大量数据时,需要挨个添加,比较费劲;第二个方式先获取传入参数的名字的枚举,在通过这个枚举获取每个名字对应的值;第三种方式十分省劲,直接获取传入参数的Map集合,不过要十分留意的是:这是一个String:String[]的键值对,当时就因为没仔细看方法的api,费了半天劲~
深入分析:1、以前从没有关注过jsp中的java代码不是类,这个问题,今天意识到这个问题,便分析了下:jsp页面在运行前会被翻译成一个java类,并被编译成字节码文件。而上面使用的request和response对象正是jsp的内置对象,这其实与servlet中的request和response很相像!2、以上方式同样适用于servlet获取get提交的数据。