一、返回JSON
编写目标方法,使其返回 JSON 对应的对象或集合
@ResponseBody //SpringMVC对JSON的支持 @RequestMapping("/testJSON") public Collection<Employee> testJSON(){ return employeeDao.getAll(); }
增加页面代码: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>
测试
二、HttpMessageConverter原理
HttpMessageConverter<T>
- HttpMessageConverter<T> 是 Spring3.0 新添加的一个接口,负责将请求信息转换为一个对象(类型为 T),将对象(类型为 T)输出为响应信息
-
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。
-
public interface HttpInputMessage extends HttpMessage { InputStream getBody() throws IOException; } public interface HttpOutputMessage extends HttpMessage { OutputStream getBody() throws IOException; }
DispatcherServlet 默认装配 RequestMappingHandlerAdapter ,而 RequestMappingHandlerAdapter 默认装配如下 HttpMessageConverter:
加入 jackson jar 包后, RequestMappingHandlerAdapter 装配的 HttpMessageConverter 如下:
默认情况下数组长度是6个;增加了jackson的包,后多个一个MappingJackson2HttpMessageConverter