JSON学习笔记
JsonResponseUtil 和JsonUtil,这两个工具类都实现接口InitializingBean!
Spring的InitializingBean和init-method
1、Spring在设置完一个bean所有的属性后,会检查bean是否实现了InitializingBean接口,如果实现就调用bean的afterPropertiesSet方法。(这个接口只有一个方法 afterPropertiesSet,这个方法会在 Bean 完成属性设置之后执行)另外,如果bean是单例的,则afterPropertiesSet方法只会被调用一次;否则每次创建bean时afterPropertiesSet方法都会被重新调用.
Spring虽然可以通过InitializingBean完成一个bean初始化后对这个bean的回调,但是这种方式要求bean实现 InitializingBean接口。一但bean实现了InitializingBean接口,那么这个bean的代码就和Spring耦合到一起了。通常情况下不建议直接实现InitializingBean,而是用Spring提供的init-method的功能来执行一个bean 子定义的初始化方法,这可以在一个bean的配置文件中通过init-method声明:
<bean id="testBean" class="TestClass" init-method="initialize"/>
spring要求这个init-method方法是一个无参数的方法
如果一个bean同时实现了这两种方式的初始化配置,则spring会先调用afterPropertiesSet方法,然后通过反射调用init-method,任何一个方法出错都会导致spring创建bean失败.如果afterPropertiesSet方法调用失败,也不会再继续执行init-mehtod方法.
2、实现org.springframework.beans.factory.InitializingBean接口允许一个bean在他的所有必需的属性被BeanFactory设置后,来执行初始化的工作。当然可以使用init-method来取代实现这个接口,以让应用不与spring产生耦合。如果一个bean既实现了InitializingBean,又指定了init-method,则spring会先调InitializingBean的方法,在调init-method指定的方法。
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于阅读和编写。同时也易于机器解析和生成。它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。
JSON建构于两种结构:
• “名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。
• 值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。
JSON具有以下这些形式:
对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。
数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。
值(value)可以是双引号括起来的字符串(string)、数值(number)、true、false、 null、对象(object)或者数组(array)。这些结构可以嵌套。
字符串(string)是由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。一个字符(character)即一个单独的字符串(character string)。
字符串(string)与C或者Java的字符串非常相似。
数值(number)也与C或者Java的数值非常相似。除去未曾使用的八进制与十六进制格式。除去一些编码细节。
空白可以加入到任何符号之间。 以下描述了完整的语言。
P17系统的实现说明:
Web层的调用类JsonResponseUtil.java
工具类:JsonUtil.java
原理是通过工具类JsonUtil进行对象装换,全部转为字符串,通过调用类JsonResponseUtil将字符串写入response,在通过Ajax回调。
在设置过程中需要设置response的contentType、charsetName!这两个字段不用指定在代码中,配置在xml文件中
通过Spring注入:
<!-- 工具类配置 -->
<bean id="jsonUtil" class="com.cpic.p17.pf.util.json.JsonUtil">
<description>上传的Action基类,下面配置具体的类解析方法</description>
<property name="jsonProcessor">
<list>
<bean class="com.cpic.p17.pf.util.json.DateJsonValueProcessor">
<constructor-arg><value>yyyy-MM-dd</value></constructor-arg>
</bean>
<bean class="com.cpic.p17.pf.util.json.TimeStampJsonValueProcessor">
<constructor-arg>
<value>yyyy-MM-dd hh:mm:ss</value>
</constructor-arg>
</bean>
</list>
</property>
</bean>
<bean id="jsonResponseUtil" class="com.cpic.p17.pf.util.web.JsonResponseUtil">
<description>JSON返回HttpResponse的封装的工具类</description>
<property name="jsonUtil" ref="jsonUtil"></property>
<!-- 这种设置Prototype可以自动识别为Json对象 -->
<property name="contentType">
<value>application/x-javascript;charset=UTF-8</value>
</property>
<property name="charsetName"><value>UTF-8</value></property>
</bean>
设置自定义的Json转换时的处理类
JsonConfig类是用于配置这些规则的,P17使用了时间格式的显示规则,使用方法registerJsonValueProcessor注册JsonValueProcessor,使用JsonValueProcessor处理Bean对象的属性值的转换
registerJsonValueProcessor(propertyType, jsonValueProcessor),第一参数是类的类型(我的理解是基本类型的包装类),第二个是JsonValueProcessor接口
说明:两个时间格式类:DateJsonValueProcessor和TimeStampJsonValueProcessor,通过上面的xml,并通过Spring初始化格式
/**
* 设置自定义的Json转换时的处理类 *
* @param jsonProcessorList
*/
P17主要使用了jsonConfig.registerJsonValueProcessor(clazz[j],(JsonValueProcessor)jsonProcessorProvider);
指定包装类的转换格式()
在JsonUtil.java中主要使用JSON包提供的方法有两个:
1、 生成Json对象的串,注意:对象串是以{}包围的
JSONObject.fromObject(data, jsonConfig).toString();
2、 生成Json数组的串,注意:数组串是以[]包围的
JSONArray.fromObject(arrayObject, jsonConfig).toString();
在JsonResponseUtil.java中需要将上面方法创建的json串返回页面
/**
* 直接将Json的串发送给客户端
* @param jsonString json的串
*/
public void responseJsonString(String jsonString) {
HttpServletResponse response = ServletActionContext.getResponse();
responseJsonString(response, jsonString);
}
/**
* 直接将字Json的字符串写入到Response中
* @param response
* @param jsonString Json的字符串
*/
public void responseJsonString(HttpServletResponse response, String jsonString) {
response.setContentType(contentType);
byte[] bytes;
try {
bytes = jsonString.getBytes(charsetName);
} catch (UnsupportedEncodingException e) {
throw new UncheckedException(e);
}
response.setContentLength(bytes.length);
try {
OutputStream os = response.getOutputStream();
os.write(bytes);
os.flush();
if(logger.isDebugEnabled()) {
logger.debug("往客户端发送的Json串为:" + jsonString);
}
} catch (IOException e) {
logger.error("在往Response中写入Json字符串的时候发生异常。", e);
throw new UncheckedException(e);
}
}
通过以上方法将获取的JSON数据,根据Ajax方法的调用,返回页面。
这个Ajax的请求及回调数据的过程都是通过prototype.js提供的类Ajax.Request实现的!
new Ajax.Request(pageUrl, pf.ajaxRequestOptions({
method : 'post',
parameters : params,
onSuccess : function(transport) {
closepageloading();//关闭滚动条
try {
func(transport);
} catch (e) {
pf.log(e.name + ':' + e.message);
}
},
onFailure : ajaxOnFailure
}));
说明:提交URL,获取JSON,也就是使用XMLHttpRequest对象去调用参数和获取返回的数据,在js中使用transport来接收该对象,然后引用XMLHttpRequest对象的方法responseText来获取信息
例:var jsonObj = transport.responseText;// XMLHttpRequest.responseText
jsonObj 显示的就是{**:**,**:**},但是字符串
var recallEndParameterVo = jsonObj.evalJSON();//evalJSON()将字符串转化为json对象,该方法是prototype提供。
对于Ajax.Request的描述如下:
Ajax.Request构造方法的第二个对象了吗? 参数{method: 'get', parameters: pars, onComplete: showResponse} 表示一个匿名对象的真实写法。他表示你传入的这个对象有一个名为 method 值为 'get'的属性,另一个属性名为 parameters 包含HTTP请求的查询字符串,和一个onComplete 属性/方法包含函数showResponse。
还有一些其它的属性可以在这个对象里面定义和设置,如 asynchronous,可以为true 或 false 来决定AJAX对服务器的调用是否是异步的(默认值是 true)。
这个参数定义AJAX调用的选项。在我们的例子中,在第一个参数通过HTTP GET命令请求那个url,传入了变量 pars包含的查询字符串, Ajax.Request 对象在它完成接收响应的时候将调用showResponse 方法。
也许你知道, XMLHttpRequest在HTTP请求期间将报告进度情况。这个进度被描述为四个不同阶段:Loading, Loaded, Interactive, 或 Complete。你可以使 Ajax.Request 对象在任何阶段调用自定义方法 ,Complete 是最常用的一个。想调用自定义的方法只需要简单的在请求的选项参数中的名为 onXXXXX 属性/方法中提供自定义的方法对象。 就像我们例子中的 onComplete 。你传入的方法将会被用一个参数调用,这个参数是 XMLHttpRequest 对象自己。你将会用这个对象去得到返回的数据并且或许检查包含有在这次调用中的HTTP结果代码的 status 属性。
还有另外两个有用的选项用来处理结果。我们可以在onSuccess 选项处传入一个方法,当AJAX无误的执行完后调用, 相反的,也可以在onFailure选项处传入一个方法,当服务器端出现错误时调用。正如onXXXXX 选项传入的方法一样,这两个在被调用的时候也传入一个带有AJAX请求的XMLHttpRequest对象。
我们的例子没有用任何有趣的方式处理这个 XML响应, 我们只是把这段XML放进了一个文本域里面。对这个响应的一个典型的应用很可能就是找到其中的想要的信息,然后更新页面中的某些元素, 或者甚至可能做某些XSLT转换而在页面中产生一些HTML。
- 大小: 17 KB
- 大小: 14.9 KB
- 大小: 31 KB
- 大小: 24.7 KB
- 大小: 45.4 KB
- 大小: 54.5 KB
分享到:
相关推荐
通过对《json 学习笔记_***.pdf》的分析,我们可以了解到,在Java项目中处理JSON数据的几种常见方式,并且了解到了这些工具的基本使用方法。同时,也认识到在处理JSON数据时可能会遇到的问题和解决方案。这些知识...
这个学习笔记主要围绕`json-lib`的使用方法和关键特性进行阐述。 首先,`json-lib`支持多种Java对象到JSON的转换,包括基本类型、数组、集合、Map以及自定义的Java类。例如,你可以通过以下方式将一个HashMap转换为...
本篇学习笔记将深入探讨Jackson框架的核心概念和使用方法,帮助你轻松应对JSON与Java对象之间的转换。 1. Jackson简介 Jackson是由FasterXML团队开发的一个开源项目,其主要目标是提供高性能、高效率的JSON处理功能...
C++学习笔记和实践项目,实践项目包括Json工具类、设计模式的C++实现、消息队列、智能指针,linux下的并发控制工具、线程池,epoll管理器和Mysql连接池、STL容器的快捷输出工具和页面置换算法(FIFO, LRU, LFU)的...
3. JSON对象与JSON数组的创建:学习笔记可能介绍如何使用JSON-lib创建JSON对象和数组。例如,你可以通过`net.sf.json.JSONObject`和`net.sf.json.JSONArray`类来实现。 4. Java对象转换为JSON:JSON-lib提供了`...
《xStream完美转换XML、JSON》学习笔记 在IT领域,数据交换是常见的需求,而XML和JSON作为两种广泛使用的数据格式,它们之间的转换尤为重要。xStream是一个强大的Java库,它能够轻松地将Java对象序列化为XML或反...
在这个学习笔记中,我们将深入探讨如何在Spring MVC中处理JSON格式的数据,包括输入和输出。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛应用于前后端数据传输。 1. **JSON格式简介** ...
【JAVA项目学习笔记】 在Java开发中,尤其是在SpringMVC框架下,我们常常会遇到各种注解的使用,这些注解极大地简化了代码并优化了性能。以下是一些关键注解的详细解释: 1. **@Basic**: 这个注解用于指定实体属性...
Vue学习笔记 Vue是一个基于JavaScript的渐进式框架,用于构建用户界面。下面是关于Vue的学习笔记。 一、Vue基本知识 在Vue中,以点vue结尾的文件称为组件文件,包含三部分:template、script、style。template是...
这篇学习笔记将逐步介绍如何从零开始搭建一个 Vue3 项目,以及在开发过程中遇到的关键概念和功能。 首先,Vue3 的安装是通过命令行工具 CMD 来完成的。在你希望创建项目的位置打开终端,然后使用 Vue CLI 或 Vite ...
通过本示例,我们了解了JSON的格式以及在实际项目中如何在前端和后端进行JSON数据的处理。同时,我们也学习了在.NET环境下如何利用***库对对象进行序列化和反序列化,这是.NET开发中处理JSON数据的常见方式之一。...
博客“JSON学习详细笔记”可能包含了以下内容: - JSON的基本语法,包括对象、数组、值类型的表示。 - 如何在Java中创建JSON对象和数组。 - 使用不同库(如Gson、Jackson、org.json等)进行JSON解析和序列化的示例...
"Python学习笔记+源码练习"是一个适合初学者的资源包,旨在帮助你从零基础开始掌握Python编程。这份资料包含了理论知识讲解和实际代码实践,使学习过程更为直观和实用。 在学习Python时,笔记是关键,它们可以帮助...
Spring Boot 是一个基于 Spring 框架的快速开发...这个完整的 Spring Boot 学习笔记涵盖了从基础到进阶的各个方面,通过学习和实践,你可以掌握 Spring Boot 开发的核心技能,从而高效地构建高质量的 Java 后端应用。
这篇“Android学习笔记--Gson笔记”将深入探讨如何利用Gson来处理JSON数据,提升Android应用的数据解析效率。 一、Gson简介 Gson库能够将Java对象转换成对应的JSON字符串,反之亦然,这使得在Android应用中存储、...
在这个"restlet2.1学习笔记项目代码"中,你可以找到如何设置Restlet组件、创建资源、定义路由、使用过滤器以及与其他服务通信的实际示例。通过阅读和运行这些代码,你可以深入理解Restlet的工作原理,并将其应用到...
学习笔记中的“源码”可能是指示例代码或完整的项目代码,帮助理解API的用法。“工具”可能指的是开发者工具,如调试器、性能分析工具等,用于优化和调试地图应用。 通过阅读《google map学习文档.doc》,可以深入...
### Struts2学习笔记之文件上传与Ajax开发 #### Struts2文件上传 **文件上传简介** 文件上传是Web应用中常见的功能之一,Struts2框架内置了对文件上传的支持,使得开发者能够轻松地实现这一功能。为了确保文件...
这份笔记以HTML、CSS、JavaScript、JSON和ES6为主要讲解对象,旨在帮助学习者深入理解这五种技术,并能够熟练应用在实际项目中。 HTML(HyperText Markup Language)是网页的基础,用于构建网页结构。笔记中可能...
### JavaWeb 学习笔记知识点总结 #### Spring Boot 和 Spring MVC 的区别 1. **Spring MVC**: - **定位**:Spring MVC 是 Spring 框架中的一个重要组成部分,主要用于构建 Web 应用程序。 - **作用**:提供了一...