一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

@ResponseBody & @RequestBody

 老鼠愛上美貓 2012-08-09

@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>

 

默認(rèn)給AnnotationMethodHandlerAdapter初始化的有(當(dāng)然我們也可以添加自定義的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是否支持當(dāng)前請求的讀與寫,讀對應(yīng)@RequestBody注解, 寫對應(yīng)@ResponseBody注解

 

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

 

例如

StringHttpMessageConverter           

支持String , Accept所有類型

 

MappingJacksonHttpMessageConverter  

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

 

 

示例:

目標(biāo):

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

 

由于<context:annotation-config />

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

 

<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類上需要標(biāo)明

 

@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這個工具進(jìn)行測試

如下圖:

 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    亚洲精品国产福利在线| 99久久精品视频一区二区| 成人午夜免费观看视频| 久热香蕉精品视频在线播放| 中文字幕一区久久综合| 精品人妻久久一品二品三品| 亚洲欧美日韩中文字幕二欧美| 欧美性高清一区二区三区视频| 亚洲欧美日韩综合在线成成| 九九视频通过这里有精品| 亚洲清纯一区二区三区| 欧美黑人暴力猛交精品| 亚洲天堂精品在线视频| 亚洲视频一区二区久久久| 日韩欧美国产精品中文字幕| 丰满的人妻一区二区三区| 久久精品伊人一区二区| 成人区人妻精品一区二区三区| 欧美性猛交内射老熟妇| 亚洲视频一区二区久久久| 丝袜美女诱惑在线观看| 草草视频精品在线观看| 欧美日韩成人在线一区| 色婷婷日本视频在线观看| 国产精品一区二区三区黄色片| 国产成人精品一区二三区在线观看| 九九热国产这里只有精品| 特黄大片性高水多欧美一级| 久久精品欧美一区二区三不卡 | 大香蕉伊人精品在线观看| 国产精品久久女同磨豆腐| 欧美色欧美亚洲日在线| 亚洲最新中文字幕在线视频| 欧美日韩中黄片免费看| 六月丁香六月综合缴情| 欧美一级日韩中文字幕| 精品国产成人av一区二区三区| 丝袜人妻夜夜爽一区二区三区| 国产免费自拍黄片免费看| 不卡一区二区在线视频| 人人妻人人澡人人夜夜|