日期:2014-05-16  浏览次数:20433 次

json 在项目中开发一个巧妙地应用

?? 在项目中需要保存客户的信息到Cookie中,因为客户要求针对常用业务操作的操作,用户可以一次设置之后,可以长时间的使用,即使下次登录,客户仍然使用可以使用。在客户登陆需要用户常用业务操作时,首先从Session中获取,如果Session中不存在,从Cookie获取,然后转换为需要的类型。

保存信息一般的可以

有两种设计方案:

(1)将客户的常用设置信息保存数据库

(2)将客户的属性保存本地的Cookie中下次登录时获取。

?

?

本人使用Cookie保存信息,客户设置信息,在Struts2 中 Action获取时采用模型驱动(ModenDriver方式),获取设置不是很方便。

在项目的开始本人想保存信息到Cookie,下次登录时从Cookie中获取各字段同时,使用反射转换为相应的数据类型(如枚举,Long等数据类型),之后发现使用json简单,同时减少了使用反射的不安全性。简化了各种操作。

??? 于是本人采用JSon保存信息,将获得客户的设置信息的对象转换为json格式的字符串之后,保存到Cookie中,在用户下载登陆时可以从Cookie中获取。

?

备注:在存储JSON格式的字符串时必须将双引号转换为单引号,不然获取不到完整的数据。因为字符串是以双引号分割。项目中使用JSON将对象转换为字符串:

?

?/**
? * 将一个bean 对象转换为jsonobject对象的字符串
? *
? * @param ignoreJPATransient? 是否忽略的输入的属性
? * @param excludes? 对象中字符串属性数组
? * @param object? 需要使用json持久化的对象
? * @return
? */
?private String jsonBuilder(boolean ignoreJPATransient, String[] excludes, Object object) {
??JsonConfig jsonConfig = new JsonConfig();
??jsonConfig.setIgnoreJPATransient(ignoreJPATransient);
??jsonConfig.setExcludes(excludes);
??JSONArray json = JSONArray.fromObject(object, jsonConfig);
??return json.toString();
?}

?

???????? 将json字符串转换为对象的方式:

?


?/**
? * 将一个json的字符串转换bean对象
? */
?private VacationOrderConditionConvertor json2BeanfromCookie() {

?//从Cookie中获取数据

??String jsonCookies = (String) cookies.get(DEFAULT_USE_QUERY_TYPE_COOKIE);


??if (StringUtils.isNotBlank(jsonCookies)) {
???// 从JSON字符串转换Bean对象

???//备注将json对象存储到Cookie中时由于字符串中有特殊字符串,Cookie中将json对象添加
???jsonCookies = jsonCookies.substring(1, jsonCookies.length() - 1);


???JSONObject json = JSONObject.fromObject(jsonCookies);


???VacationOrderConditionConvertor tmpvc = (VacationOrderConditionConvertor) JSONObject.toBean(json, VacationOrderConditionConvertor.class);
???return tmpvc;
??}
??return null;
?}

?