最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

HttpMessageConverter報(bào)文信息轉(zhuǎn)換器的深入講解

 更新時(shí)間:2022年01月06日 12:02:11   作者:拾階求上  
在Spring中內(nèi)置了大量的HttpMessageConverter,通過請(qǐng)求頭信息中的MIME類型,選擇相應(yīng)的HttpMessageConverter,這篇文章主要給大家介紹了關(guān)于HttpMessageConverter報(bào)文信息轉(zhuǎn)換器的相關(guān)資料,需要的朋友可以參考下

前言

HttpMessageConverter,報(bào)文信息轉(zhuǎn)換器,將請(qǐng)求報(bào)文轉(zhuǎn)換為Java對(duì)象,或?qū)ava對(duì)象轉(zhuǎn)換為響應(yīng)報(bào)文。

HttpMessageConverter提供了兩個(gè)注解和兩個(gè)類型:@RequestBody,@ResponseBody,RequestEntity,ResponseEntity。

HttpMessageConverter 介紹

org.springframework.http.converter.HttpMessageConverter 是一個(gè)策略接口,接口說明如下:

Strategy interface that specifies a converter that can convert from and to HTTP requests and responses. 簡單說就是 HTTP request (請(qǐng)求)和response (響應(yīng))的轉(zhuǎn)換器。該接口有只有5個(gè)方法,簡單來說就是獲取支持的 MediaType(application/json之類),接收到請(qǐng)求時(shí)判斷是否能讀(canRead),能讀則讀(read);返回結(jié)果時(shí)判斷是否能寫(canWrite),能寫則寫(write)。這幾個(gè)方法先有個(gè)印象即可:

boolean canRead(Class<?> clazz, MediaType mediaType);
boolean canWrite(Class<?> clazz, MediaType mediaType);
List<MediaType> getSupportedMediaTypes();
T read(Class<? extends T> clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException;
void write(T t, MediaType contentType, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException;

一、@RequestBody 請(qǐng)求體注解

@RequestBody可以獲取請(qǐng)求體,需要在控制器方法設(shè)置一個(gè)形參。

使用@RequestBody進(jìn)行標(biāo)識(shí),當(dāng)前請(qǐng)求的請(qǐng)求體就會(huì)為當(dāng)前注解所標(biāo)識(shí)的形參賦值。

1.1、表單提交模擬

<form th:action="@{/testRequestBody}" method="post">
    用戶名:<input type="text" name="username"><br>
    密碼:<input type="password" name="password"><br>
    <input type="submit">
</form>

1.2、控制器方法示例

@RequestMapping("/testRequestBody")
public String testRequestBody(@RequestBody String requestBody){
    System.out.println("requestBody:"+requestBody);
    return "success";
}

輸出結(jié)果:

requestBody:username=admin&password=123456

二、RequestEntity 請(qǐng)求封裝對(duì)象

RequestEntity 封裝請(qǐng)求報(bào)文的一種類型,需要在控制器方法的形參中設(shè)置該類型的形參,當(dāng)前請(qǐng)求的請(qǐng)求報(bào)文就會(huì)賦值給該形參。

  • 通過getHeaders()獲取請(qǐng)求頭信息
  • 通過getBody()獲取請(qǐng)求體信息

2.1、控制器方式示例

@RequestMapping("/testRequestEntity")
public String testRequestEntity(RequestEntity<String> requestEntity){
    System.out.println("requestHeader:"+requestEntity.getHeaders());
    System.out.println("requestBody:"+requestEntity.getBody());
    return "success";
}

2.2、輸出結(jié)果

requestHeader:[host:"localhost:8080", connection:"keep-alive", content-length:"27", cache-control:"max-age=0", sec-ch-ua:"" Not A;Brand";v="99", "Chromium";v="90", "Google Chrome";v="90"", sec-ch-ua-mobile:"?0", upgrade-insecure-requests:"1", origin:"http://localhost:8080", user-agent:"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36"] requestBody:username=admin&password=123

三、@ResponseBody 響應(yīng)體注解

@ResponseBody用于標(biāo)識(shí)一個(gè)控制器方法,可以將該方法的返回值直接作為響應(yīng)報(bào)文的響應(yīng)體響應(yīng)到瀏覽器。

3.1、控制器方式示例

@RequestMapping("/testResponseBody")
@ResponseBody 
public String testResponseBody(){
    return "success";
}

結(jié)果:瀏覽器頁面顯示 success

3.2、SpringMVC 添加Json格式轉(zhuǎn)換器

首先:導(dǎo)入jackson的依賴

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.12.1</version>
</dependency>

然后:在SpringMVC的核心配置文件中開啟mvc的注解驅(qū)動(dòng)。

此時(shí)在HandlerAdaptor中會(huì)自動(dòng)裝配一個(gè)消息轉(zhuǎn)換器:MappingJackson2HttpMessageConverter,可以將響應(yīng)到瀏覽器的Java對(duì)象轉(zhuǎn)換為Json格式的字符串。

<mvc:annotation-driven />

3.3、控制器使用 Json 格式轉(zhuǎn)換器示例

在處理器方法上使用 @ResponseBody 注解進(jìn)行標(biāo)識(shí)。

將Java對(duì)象直接作為控制器方法的返回值返回,就會(huì)自動(dòng)轉(zhuǎn)換為Json格式的字符串

@RequestMapping("/testResponseUser")
@ResponseBody
public User testResponseUser(){
    return new User(1001,"admin","123456",23,"男");
}

瀏覽器的頁面中展示的結(jié)果:

{"id":1001,"username":"admin","password":"123456","age":23,"sex":"男"}

3.4、@RestController注解

@RestController注解是springMVC提供的一個(gè)復(fù)合注解,標(biāo)識(shí)在控制器的類上。

相當(dāng)于為類添加了@Controller注解,并且為其中的每個(gè)方法添加了@ResponseBody注解。

四、ResponseEntity 響應(yīng)封裝對(duì)象

ResponseEntity 用于控制器方法的返回值類型,該控制器方法的返回值就是響應(yīng)到瀏覽器的響應(yīng)報(bào)文。

總結(jié)

到此這篇關(guān)于HttpMessageConverter報(bào)文信息轉(zhuǎn)換器的文章就介紹到這了,更多相關(guān)HttpMessageConverter報(bào)文信息轉(zhuǎn)換器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java類成員訪問權(quán)限控制知識(shí)總結(jié)

    Java類成員訪問權(quán)限控制知識(shí)總結(jié)

    這篇文章主要介紹了Java類成員訪問權(quán)限控制知識(shí)總結(jié),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • java回調(diào)機(jī)制實(shí)例詳解

    java回調(diào)機(jī)制實(shí)例詳解

    這篇文章主要介紹了java回調(diào)機(jī)制實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • java實(shí)現(xiàn)文件重命名的方法

    java實(shí)現(xiàn)文件重命名的方法

    這篇文章主要介紹了java實(shí)現(xiàn)文件重命名的方法,涉及java針對(duì)文件的重命名操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • SpringBoot實(shí)現(xiàn)RabbitMQ三種使用方式

    SpringBoot實(shí)現(xiàn)RabbitMQ三種使用方式

    本文主要介紹了SpringBoot實(shí)現(xiàn)RabbitMQ三種使用方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Eclipse連接Mysql數(shù)據(jù)庫操作總結(jié)

    Eclipse連接Mysql數(shù)據(jù)庫操作總結(jié)

    這篇文章主要介紹了Eclipse連接Mysql數(shù)據(jù)庫操作總結(jié)的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-08-08
  • SpringBoot集成Mybatis并測試

    SpringBoot集成Mybatis并測試

    這篇文章主要介紹了SpringBoot集成Mybatis并測試,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-02-02
  • JVM雙親委派模型知識(shí)詳細(xì)總結(jié)

    JVM雙親委派模型知識(shí)詳細(xì)總結(jié)

    今天帶各位小伙伴學(xué)習(xí)Java虛擬機(jī)的相關(guān)知識(shí),文中對(duì)JVM雙親委派模型作了非常詳細(xì)的介紹,對(duì)正在學(xué)習(xí)java的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-05-05
  • java彩色瓷磚編程題分析

    java彩色瓷磚編程題分析

    這篇文章主要介紹了java彩色瓷磚編程題的詳細(xì)解題思路以及解決方法分享,對(duì)此有興趣的參考下。
    2018-02-02
  • Elasticsearch索引結(jié)構(gòu)與算法解析

    Elasticsearch索引結(jié)構(gòu)與算法解析

    ?作為搜索引擎的一部分,ES自然具有速度快、結(jié)果準(zhǔn)確、結(jié)果豐富等特點(diǎn),那么ES是如何達(dá)到“搜索引擎”級(jí)別的查詢效率呢?首先是索引,其次是壓縮算法,接下來我們就一起了解下ES的索引結(jié)構(gòu)和壓縮算法
    2023-04-04
  • 解決MyEclipse中的Building workspace問題的三個(gè)方法

    解決MyEclipse中的Building workspace問題的三個(gè)方法

    這篇文章主要介紹了解決MyEclipse中的Building workspace問題的三個(gè)方法,需要的朋友可以參考下
    2015-11-11

最新評(píng)論

肇州县| 故城县| 青浦区| 平果县| 观塘区| 施甸县| 修武县| 杭州市| 磐石市| 禄丰县| 思南县| 开化县| 长丰县| 江川县| 栾川县| 万荣县| 兴文县| 丰县| 简阳市| 十堰市| 农安县| 饶河县| 南靖县| 钟祥市| 安吉县| 霍林郭勒市| 宁乡县| 保康县| 龙游县| 宣威市| 广元市| 徐闻县| 广宁县| 鄂尔多斯市| 吴旗县| 蕲春县| 吴忠市| 天峻县| 平南县| 长岭县| 措美县|