1).spring 对JSON的支持依赖2个jar包
- <dependency>
- <groupId>org.codehaus.jackson</groupId>
- <artifactId>jackson-core-asl</artifactId>
- <version>1.8.4</version>
- </dependency>
- <dependency>
- <groupId>org.codehaus.jackson</groupId>
- <artifactId>jackson-mapper-asl</artifactId>
- <version>1.8.4</version>
- </dependency>
2.加入开启注解支持<mvc:annotation:driven/>。默认初始化DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter。AnnotationMethodHandlerAdapter默认开启7个消息转换器,分别是:
ByteArrayHttpMessageConverter
StringHttpMessageConverter
ResourceHttpMessageConverter
SourceHttpMessageConverter<T>
XmlAwareFormHttpMessageConverter
Jaxb2RootElementHttpMessageConverter
MappingJacksonHttpMessageConverter
a.如何寻找对应的converter
a1.注册消息转换器
a2.从客户端请求的header中寻找客户端可以接收的类型,比如 Accept application/json,application/xml等,组成一个集合
a3.HttpMessageConverter 具有canRead和canWrite方法 返回值都是boolean,验证HttpMessageConverter是否支持当前请求的读与写,读对应@RequestBody注解, 写对应@ResponseBody注解
a4.遍历HttpMessageConverter集合与前面获取可接受类型进行匹配,如果匹配直接使用当前第一个匹配的HttpMessageConverter,然后return.匹配根据accept和返回的类型
如
StringHttpMessageConverter
支持String , Accept所有类型
MappingJacksonHttpMessageConverter
支持Map List 实体对象等等 ,Accept:application/json
3.根据需求修改AnnotationMethodHandlerAdapter的HttpMessageConverter集合。
<beans:bean
class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<beans:property name="messageConverters">
<beans:list>
<beans:bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/>
<beans:bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"/>
<beans:bean class="org.springframework.http.converter.ResourceHttpMessageConverter"/>
<beans:bean class="org.springframework.http.converter.xml.SourceHttpMessageConverter"/>
<beans:bean class="org.springframework.http.converter.xml.XmlAwareFormHttpMessageConverter"/>
</beans:list>
</beans:property>
</beans:bean>
4.代码中加入@ResponseBody和@RequestBody以支持ajax
5.前台ajax调用$.getJSON(account/availability, { name: $('#name').val() },