Sping MVC 自动转换 AnnotationMethodHandlerAdapter

Spring 3.X系列增加了新注解@ResponseBody@RequestBody 

  • @RequestBody 将HTTP请求正文转换为适合的HttpMessageConverter对象。
  • @ResponseBody 将内容或对象作为 HTTP 响应正文返回,并调用适合HttpMessageConverter的Adapter转换对象,写入输出流。

HttpMessageConverter接口,需要开启<mvc:annotation-driven  />。 

AnnotationMethodHandlerAdapter将会初始化7个转换器,可以通过调用AnnotationMethodHandlerAdaptergetMessageConverts()方法来获取转换器的一个集合 List<HttpMessageConverter> 

ByteArrayHttpMessageConverter 
StringHttpMessageConverter 
ResourceHttpMessageConverter 
SourceHttpMessageConverter 
XmlAwareFormHttpMessageConverter 
Jaxb2RootElementHttpMessageConverter 
MappingJacksonHttpMessageConverter
可以理解为,只要有对应协议的解析器,你就可以通过几行配置,几个注解完成协议——对象的转换工作!


      <!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 -->
      <bean
         class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
          <property name="messageConverters">
              <util:list id="beanList">
                <ref bean="stringHttpMessageConverter" />
                  <ref bean="jsonHttpMessageConverter" />
                  <ref bean="marshallingHttpMessageConverter" />
              </util:list>
         </property>
     </bean>
 
     <bean id="stringHttpMessageConverter"
         class="org.springframework.http.converter.StringHttpMessageConverter" />
     <bean id="jsonHttpMessageConverter"
         class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" />
     <bean id="marshallingHttpMessageConverter"
         class="org.springframework.http.converter.xml.MarshallingHttpMessageConverter">
         <property name="marshaller" ref="castorMarshaller" />
        <property name="unmarshaller" ref="castorMarshaller" />
    </bean>
 
     <bean id="castorMarshaller" class="org.springframework.oxm.castor.CastorMarshaller" />

MappingJacksonHttpMessageConverter能够将POJO对象自动转换为JSON对象


@RequestMapping(value = "/getPojoJson" , method=RequestMethod.GET)
    public @ResponseBody Pojo getPojoJson() {
      Pojo pojo=new Pojo();
      pojo.setA("test");
      pojo.setB(1);
      pojo.setD(new Date());
      return pojo;
    }

需要依赖JSON对象的处理JAR包
jackson-core-lgpl.jar
jackson-mapper-lgpl.jar
下载地址:
http://jackson.codehaus.org/

以下将以
application/json;charset=UTF-8

进行自动转换


<bean id="mappingJacksonHttpMessageConverter"       
	    class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">       
	      <property name="supportedMediaTypes">     
	           <list>            
	               <value>application/json;charset=UTF-8</value>             
	            </list>        
	       </property>    
	  </bean>    
	                     
	  <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">       	                       
	               <property name="messageConverters">        
	                   <list>              
	                       <ref bean="mappingJacksonHttpMessageConverter"/> 
	                    </list>        
	                </property>  
	   </bean>





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章