快速学习-处理JSON

第8章 处理JSON

8.1 返回JSON

  1. 加入 jar 包:
http://wiki.fasterxml.com/JacksonDownload/   下载地址
jackson-annotations-2.1.5.jar
jackson-core-2.1.5.jar
jackson-databind-2.1.5.jar
  1. 编写目标方法,使其返回 JSON 对应的对象或集合
    @ResponseBody  //SpringMVC对JSON的支持
    @RequestMapping("/testJSON")
    public Collection<Employee> testJSON(){
        return employeeDao.getAll();
    }
  1. 增加页面代码:index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="scripts/jquery-1.9.1.min.js"></script>
<script type="text/javascript">
$(function(){ 
$("#testJSON").click(function(){
 
var url = this.href ;
var args = {};
$.post(url,args,function(data){
	for(var i=0; i<data.length; i++){
		var id = data[i].id;
		var lastName = data[i].lastName ;
		alert(id+" - " + lastName);
		}
	});
	 
	return false ;
	});                
});
</script>
 
</head>
<body>
 
<a href="empList">To Employee List</a>
<br><br>
 
<a id="testJSON" href="testJSON">testJSON</a>
 
</body>
</html>
  1. 测试
    在这里插入图片描述

8.2 HttpMessageConverter原理

8.2.1 HttpMessageConverter

  1. HttpMessageConverter<T> 是 Spring3.0 新添加的一个接口,负责将请求信息转换为一个对象(类型为 T),将对象(类型为 T)输出为响应信息
  2. HttpMessageConverter<T> 接口定义的方法:
    Boolean canRead(Class<?> clazz,MediaType mediaType): 指定转换器可以读取的对象类型,即转换器是否可将请求信息转换为 clazz 类型的对象,同时指定支持 MIME 类型(text/html,applaiction/json等)
    Boolean canWrite(Class<?> clazz,MediaType mediaType):指定转换器是否可将 clazz 类型的对象写到响应流中,响应流支持的媒体类型在MediaType 中定义。
    List<MediaType> getSupportMediaTypes():该转换器支持的媒体类型。
    T read(Class<? extends T> clazz,HttpInputMessage inputMessage):将请求信息流转换为 T 类型的对象。
    void write(T t,MediaType contnetType,HttpOutputMessgae outputMessage):将T类型的对象写到响应流中,同时指定相应的媒体类型为 contentType。

在这里插入图片描述

package org.springframework.http;
 
import java.io.IOException;
import java.io.InputStream;
 
public interface HttpInputMessage extends HttpMessage {
 
	InputStream getBody() throws IOException;
 
}	
package org.springframework.http;
 
import java.io.IOException;
import java.io.OutputStream;
 
public interface HttpOutputMessage extends HttpMessage {
 
	OutputStream getBody() throws IOException;
 
}

在这里插入图片描述

  1. DispatcherServlet 默认装配 RequestMappingHandlerAdapter ,
    而 RequestMappingHandlerAdapter 默认装配如下 HttpMessageConverter:
    在这里插入图片描述
  2. 加入 jackson jar 包后, RequestMappingHandlerAdapter
    装配的 HttpMessageConverter 如下:
    在这里插入图片描述

默认情况下数组长度是6个;增加了jackson的包,后多个一个MappingJackson2HttpMessageConverter

在这里插入图片描述

发布了1356 篇原创文章 · 获赞 1124 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/weixin_42528266/article/details/104283259