<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Spring 3.x MVC 入門4 -- @ResponseBody & @RequestBody

      @ResponseBody & @RequestBody

      作用?

      @RequestBody 將 HTTP 請求正文插入方法中,使用適合的HttpMessageConverter將請求體寫入某個對象。

       

      @ResponseBody 將內(nèi)容或?qū)ο笞鳛?HTTP 響應(yīng)正文返回,使用@ResponseBody將會跳過視圖處理部分,而是調(diào)用適合HttpMessageConverter,將返回值寫入輸出流。

       

      HttpMessageConverter接口

      <mvc:annotation-driven  />開啟了之后它給AnnotationMethodHandlerAdapter初始化7個轉(zhuǎn)換器,可以通過調(diào)用AnnotationMethodHandlerAdapter類的getMessageConverts()方法來獲取轉(zhuǎn)換器的一個集合 List<HttpMessageConverter>

       

      默認給AnnotationMethodHandlerAdapter初始化的有(當然我們也可以添加自定義的converter)

       

      ByteArrayHttpMessageConverter

      StringHttpMessageConverter

      ResourceHttpMessageConverter

      SourceHttpMessageConverter<T>

      XmlAwareFormHttpMessageConverter

      Jaxb2RootElementHttpMessageConverter

      MappingJacksonHttpMessageConverter

       

      Spring是如何尋找最佳的HttpMessageConverter

      1 首先獲取注冊的所有HttpMessageConverter集合

       

      2 然后客戶端的請求header中尋找客戶端可接收的類型,

      比如  Accept application/json,application/xml等,組成一個集合

       

      3 所有的HttpMessageConverter 都有canRead和canWrite方法 返回值都是boolean,看這個HttpMessageConverter是否支持當前請求的讀與寫,讀對應(yīng)@RequestBody注解, 寫對應(yīng)@ResponseBody注解

       

      4 遍歷HttpMessageConverter集合與前面獲取可接受類型進行匹配,如果匹配直接使用當前第一個匹配的HttpMessageConverter,然后return(一般是通過Accept和返回值對象的類型進行匹配)

       

      例如

      StringHttpMessageConverter           

      支持String , Accept所有類型

       

      MappingJacksonHttpMessageConverter  

      支持Map List 實體對象等等  ,Accept:application/json

       

       

      示例:

      目標:

      使用ResponseBody根據(jù)head的Accept不同對同一地址請求分別來呈現(xiàn)一個實體的json與xml結(jié)果

       

      由于<context:annotation-config />

      默認會初始化AnnotationMethodHanlderAdapter,但我們返回xml內(nèi)容需要對這個HandlerAdapter進行一定的修改,所以配置文件如下:

       

      <context:component-scan base-package="com.controls" />

         

      <context:annotation-config />

         

      <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">

              <property name="messageConverters">

                  <list>

                      <ref bean="stringHttpMessageConverter" />

                      <ref bean="jsonHttpMessageConverter" />

                      <ref bean="marshallingHttpMessageConverter" />

                  </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">

              <constructor-arg ref="jaxbMarshaller" />

              <property name="supportedMediaTypes" value="application/xml"></property>

      </bean>

         

      <bean id="jaxbMarshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">

              <property name="classesToBeBound">

                  <list>

                      <value>com.model.User</value>

                  </list>

              </property>

      </bean>

       

      注:要使用Jaxb2Marshaller我們在對應(yīng)的實體,比如User類上需要標明

       

      @XmlRootElement 注解,需要引入

       

      import javax.xml.bind.annotation.XmlRootElement;

      這個包。

       

       

      Controller中應(yīng)對請求的方法

       

      @RequestMapping(value="/user/{userid}", method=RequestMethod.GET)

      public @ResponseBody User queryUser(@PathVariable("userid") long userID) {

             Calendar d = Calendar.getInstance();

             d.set(1987, 12, 9);

             User u = new User();

             u.setUserID(userID);

             u.setUserName("zhaoyang");

             u.setBirth(d.getTime());

             return u;

      }

       

      接著我們使用curl這個工具進行測試

      如下圖:

       

      posted on 2012-01-07 00:25  陽陽多  閱讀(42114)  評論(2)    收藏  舉報

      主站蜘蛛池模板: 在国产线视频A在线视频| 在线观看的网站| 亚洲欧美在线一区中文字幕| 国产精品自拍午夜福利| 夜色福利站WWW国产在线视频| 宜春市| 国产69成人精品视频免费| 亚洲精品无码成人A片九色播放| 精品国产丝袜自在线拍国语| 国产亚洲精品久久yy50| 99中文字幕精品国产| 高潮喷水抽搐无码免费| 国产精品白丝久久AV网站| 精品999日本久久久影院| 波多野结衣一区二区三区高清| 给我播放片在线观看| 麻豆亚洲精品一区二区| 无码精品人妻一区二区三区湄公河 | 色窝窝免费播放视频在线| 久久久久久免费一区二区三区| 四虎永久在线精品无码视频| 暖暖影院日本高清...免费| 亚洲欧美日韩成人综合一区| 波多野结衣美乳人妻hd电影欧美| 欧美成人精品一级在线观看| 年日韩激情国产自偷亚洲| 亚洲VA成无码人在线观看天堂| 亚洲熟女乱色一区二区三区| 久久精品日韩av无码| 在线亚洲妇色中文色综合| 亚洲av无码片在线播放| 久久精品国产精品第一区| 亚洲精品国产美女久久久| 亚洲中文字幕精品一区二区三区| 国产色悠悠综合在线观看| 久热综合在线亚洲精品| 中国女人大白屁股ass| 国产一区二区亚洲一区二区三区| 真人性囗交视频| 新田县| 99久久激情国产精品|