日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

SpringBoot自定義HttpMessageConverter操作

瀏覽:2日期:2023-12-13 10:28:42
目錄簡介MediaType@RequestBody的簡單實用1、解析json2、解析xml3、原理@ResponseBody自定義HttpMessageConverter1、目的2、步驟3、自定義MediaType問題解決辦法:總結簡介

我們使用**@RequestBody可以將請求體中的JSON字符串綁定到相應的bean,使用@ResponseBody**可以使返回結果不會被解析為跳轉路徑,而是直接寫入 HTTP response body 中,而整個數據綁定的過程其實是HttpMessageConverter在起作用。

MediaType

MediaType,即是Internet Media Type,互聯網媒體類型;也叫做MIME類型,在Http協議消息頭中,使用Content-Type來表示具體請求中的媒體類型信息。

@RequestBody的簡單實用

@requestBody注解常用來處理content-type不是默認的application/x-www-form-urlcoded編碼的內容,比如說:application/json或者是application/xml等。一般情況下來說常用其來處理application/json類型。

1、解析json

Content-Type: application/json

請求數據格式

{ 'question': 'aaa', 'fromUser': 'bbb'}2、解析xml

Content-Type: application/xml

請求數據格式

<?xml version=’1.0’ encoding='utf-8'?> <Request> <question>aaa</question> <fromUser>bbb</fromUser></Request>

上面兩種方式都是可以把數據映射到Bean中的。

3、原理

Spring會根據MediaType查找合適的HttpMessageConverter的實現類進行序列化的操作

public interface HttpMessageConverter<T> { 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;}方法 作用 getSupportedMediaTypes 獲取支持的MediaType read 讀取request的body write 把數據寫到response的body中 @ResponseBody

ResponseBody中的使用和RequestBody類似

自定義HttpMessageConverter1、目的

SpringBoot提供一系列的HttpMessageConverter,滿足了我們的絕大部分需求,如果有特性需求,我們可以編寫自定義的轉換器

2、步驟

編寫Converter類,需要實現HttpMessageConverter,或者繼承已經存在的實現類,并重寫上文中的關鍵方法

編寫WebConfig(extends WebMvcConfigurerAdapter)

@Configurationpublic class WebConfig extends WebMvcConfigurerAdapter { /** * 自定義message_convert */ @Override public void extendMessageConverters(List<HttpMessageConverter<?>> converters) { // 把converter添加到converters的最后(SpringBoot會使用第一個匹配到的Converter) converters.add(new XxxConverter()); // 把converter添加到converters的最前面 // converters.add(0, new XxxConverter()); }}

到此為止,我們自定義的Converter已經生效了

3、自定義MediaType

雖然我們已經編寫Converter,但是我們一般會為自定義的Converter指定可以處理的媒體類型,可以指定自定義的媒體類型

在自定義的Converter中新增自定義的MediaType,并且根據需要修改canRead,canWrite;

public class XxxConverter implements HttpMessageConverter<Serializable> { public static final String CUSTOM_MEDIA = 'application/custom-media'; @Override public boolean canRead(Class<?> clazz, MediaType mediaType) {return true; } @Override public boolean canWrite(Class<?> clazz, MediaType mediaType) {return true; } @Override public List<MediaType> getSupportedMediaTypes() {return Lists.newArrayList(MediaType.parseMediaType(CUSTOM_MEDIA)); } @Override public Serializable read(Class<? extends Serializable> clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException {return null; } @Override public void write(Serializable serializable, MediaType contentType, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException { }}

這里一定要修改getSupportedMediaTypes方法,SpringBoot是根據這個方法的返回,以及Controller—@RequestMapping中指定的MediaType,判斷是否可用于當前請求/返回。

在Controller的@RequestMapping中指定consumes或者produces

@RestController@RequestMapping(produces = CUSTOM_MEDIA, consumes = CUSTOM_MEDIA)@Validatedpublic class HomeController { @GetMapping(HOME) JsonResult info(@RequestHeader('userId') Long userId) {return JsonResult.ok(); }}

consumes是指定請求的MediaType,需要調用方設置成我們提供的application/custom-media

produces是指定返回的MediaType,如果我們設置成application/custom-media,那么方法返回的數據就會通過自定義的XxxConverter進行轉換。

問題

注意:如果我們修改了produces的MediaType,那么HTTP返回中的MediaType也會是我們自定義的類型,除非和調用方約定好,否則調用方是沒有辦法解析的。

解決辦法:

public class XxxConverter implements HttpMessageConverter<Serializable> { ...... @Override public void write(Serializable serializable, MediaType contentType, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException {// 最后把Content-Type改成APPLICATION_JSON_UTF8_VALUE,要不然請求方會無法解析((ServletServerHttpResponse) outputMessage).getServletResponse().setHeader('Content-Type',APPLICATION_JSON_UTF8_VALUE); }}總結

一般情況下,SpringBoot提供的默認轉換器已經足夠我們使用,但是在一些接口的參數需要加解密,調整返回體的結構等情況下會用到。以上為個人經驗,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
蜜桃视频第一区免费观看| 日韩av一区二区三区| 免费在线观看一区二区三区| 蜜乳av另类精品一区二区| 蜜桃成人精品| 国产亚洲电影| 欧美精选视频一区二区| 国产精品天堂蜜av在线播放| 一区二区小说| 欧美成a人片免费观看久久五月天| 日韩和欧美的一区| 999精品一区| 久久精品九色| 亚洲手机在线| 久久精品国产亚洲一区二区三区| 国产精品一区毛片| 日本在线视频一区二区| 日韩成人精品一区二区三区 | 香蕉成人久久| 中文字幕av亚洲精品一部二部| 亚洲精品一区二区在线播放∴| 视频精品一区二区| 国产一区二区高清| 亚洲1区在线观看| 国产中文欧美日韩在线| 日韩精品视频网站| 精品中国亚洲| 久久午夜精品| 欧美精品导航| 四虎影视精品| 成人污污视频| 影音先锋久久精品| 日韩黄色大片网站| 毛片在线网站| 99久久婷婷| 国产精品社区| 日韩影院免费视频| jizzjizz中国精品麻豆| 蜜桃视频在线网站| 亚洲精品美女| 麻豆视频一区二区| 免费看欧美美女黄的网站| 黄色aa久久| 日韩高清一区| 国产99久久| 成人综合一区| 综合日韩av| 美腿丝袜亚洲一区| 日本少妇精品亚洲第一区| 欧美日韩激情在线一区二区三区| 丝袜国产日韩另类美女| 国产一区二区三区日韩精品| 麻豆亚洲精品| 亚洲第一区色| 国产一区日韩一区| 成人福利av| 丝袜美腿亚洲一区| 久久婷婷丁香| 国产一区二区三区天码| 久久大逼视频| 99热免费精品| 99日韩精品| 米奇777超碰欧美日韩亚洲| 精品国产欧美| 97精品中文字幕| 麻豆视频久久| 樱桃视频成人在线观看| 久久99精品久久久久久园产越南| 日本成人精品| 亚洲精选91| 亚洲一级在线| 玖玖精品视频| 蜜桃视频在线观看一区| 久久久精品五月天| 亚洲欧洲高清| 九色porny丨国产首页在线| 精品久久一区| 欧美激情综合| 国产成人a视频高清在线观看| 麻豆国产精品视频| 国产精品a级| 亚洲综合二区| 蜜臀a∨国产成人精品| 亚洲久草在线| 国产精品毛片视频| 韩国久久久久久| 999久久久亚洲| 首页欧美精品中文字幕| 蜜桃伊人久久| 国产午夜精品一区在线观看| 欧美一区成人| 欧美日韩精品免费观看视完整| 欧美jjzz| 日韩精品导航| 日韩精品dvd| 一区二区三区四区精品视频| 亚洲ww精品| 国产精品成人国产| 九九久久电影| 精品三级久久久| 丝袜亚洲另类欧美| 久久久精品午夜少妇| 国产日韩在线观看视频| 欧美专区18| 激情久久久久久| 午夜视频精品| 国产情侣一区在线| 亚洲精华国产欧美| 九九99久久精品在免费线bt| 99国产精品久久久久久久成人热| 国产精品毛片在线| 老司机精品视频在线播放| 水蜜桃久久夜色精品一区| 你懂的亚洲视频| 亚洲欧美久久久| 首页国产精品| 日韩不卡在线观看日韩不卡视频 | 久久99久久人婷婷精品综合| 国产精品毛片久久| 亚洲免费网址| 国产中文欧美日韩在线| 久久亚洲图片| 日韩av首页| 国产精品久久久久久久久免费高清| 丝袜亚洲精品中文字幕一区| 国产日韩中文在线中文字幕| 中文字幕高清在线播放| 日韩在线黄色| 先锋亚洲精品| 国产另类在线| 亚洲综合精品| 亚洲成人va| 国产成人精品亚洲线观看| 国产日韩精品视频一区二区三区| 亚洲18在线| 激情五月综合网| 色欧美自拍视频| 国产精品一卡| 97se亚洲| 久久亚洲资源中文字| 日本一区二区三区中文字幕| 日韩视频在线一区二区三区| 日韩在线短视频| 国产精品亚洲成在人线| 亚洲电影在线一区二区三区| 国产精品7m凸凹视频分类| 国产一区二区三区四区大秀| 欧美日韩亚洲一区二区三区在线| 亚洲美女91| 视频一区二区欧美| 欧美羞羞视频| 日韩专区一卡二卡| 亚洲一区成人| 日本欧洲一区二区| 蜜臀av一区二区三区| 亚洲精品美女91| 国产精品成久久久久| 日韩久久精品网| 91精品电影| 最新国产精品久久久| 国产伦乱精品| 国产一区调教| 综合激情一区| 国产精品美女在线观看直播| 日本特黄久久久高潮| 国产精品theporn| 亚州av乱码久久精品蜜桃| 久久亚洲在线| 综合在线一区| 精品三区视频| 伊人久久亚洲美女图片| 国产精品久久久久77777丨| 日本а中文在线天堂| 香蕉国产精品| 欧美中文高清| 欧美日韩免费看片| 日韩国产精品久久久| 国产精品传媒麻豆hd| 久久在线视频免费观看| 91p九色成人| 久久久蜜桃一区二区人| 麻豆中文一区二区| 欧美不卡高清一区二区三区| 丝袜亚洲另类欧美| 麻豆一区二区三区| 首页欧美精品中文字幕| 欧美va天堂在线| 国产精品久久久久蜜臀| 亚洲tv在线| 黑丝一区二区三区| 蜜桃tv一区二区三区| 精品国产午夜| 日韩精品三级| 久久亚洲国产精品一区二区| 红桃视频欧美| 三上悠亚国产精品一区二区三区| 日本一区中文字幕| 国产中文在线播放| 欧美专区一区| 日韩天堂av|