日本不卡不码高清免费观看,久久国产精品久久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久久,三上悠亚国产精品一区二区三区
亚洲精品福利| 麻豆成人在线观看| 99久久www免费| av资源亚洲| 亚洲一区资源| 日本免费一区二区三区四区| 欧美片第1页| 99精品在线| 欧美日韩国产亚洲一区| 亚洲激情偷拍| 蜜臀va亚洲va欧美va天堂| 蜜桃视频一区二区| 日韩精品视频网| 国产日产精品_国产精品毛片 | 亚洲一区二区三区中文字幕在线观看 | 欧美不卡高清一区二区三区| 91亚洲国产高清| 亚洲综合在线电影| 欧美 日韩 国产一区二区在线视频| 久久国产电影| 亚洲欧美日韩国产综合精品二区| 免费人成在线不卡| 91伊人久久| 久久精品国产网站| 成人在线网站| 男人操女人的视频在线观看欧美| 亚洲v天堂v手机在线| 国产精品最新| sm久久捆绑调教精品一区| 久久久久.com| 一区二区日韩免费看| 日韩av中文字幕一区二区三区| 国产精品sm| 91精品推荐| 日韩精品一区二区三区av| 欧美xxxx性| 午夜国产一区二区| 日韩1区2区日韩1区2区| 国产欧洲在线| 日韩影院免费视频| 久久精品国产99国产精品| 99精品电影| 日韩一二三区在线观看| 欧美激情福利| 国产精品视区| 久久精品国产99国产精品| 成人va天堂| 色综合视频一区二区三区日韩 | 亚洲精品国产精品粉嫩| 美女久久精品| 狠狠操综合网| 国产探花一区二区| 欧美91视频| 国产欧美三级| 国产在线不卡| 欧美日韩在线精品一区二区三区激情综合 | 99成人在线| 美女国产一区二区三区| 欧美在线资源| 国产精品伊人| 午夜精品网站| 里番精品3d一二三区| 蜜桃国内精品久久久久软件9| 欧美天堂在线| 免费av一区| 国产欧美一区二区精品久久久| 另类中文字幕国产精品| 日韩国产高清在线| 欧美日中文字幕| 日本免费一区二区视频| 亚洲成人va| 国产精品久久| 免费一级片91| 久久精品导航| 精品视频自拍| 人人爱人人干婷婷丁香亚洲| 91精品视频一区二区| 日韩一区二区免费看| av在线最新| 国产精品久久久一区二区| 久久最新视频| 日韩激情一区| 欧美久久亚洲| 免费成人性网站| 婷婷激情综合| 成人日韩在线| 精品久久在线| 国产精品一区二区av交换| 亚洲精品日韩久久| 亚洲一级在线| 国产韩日影视精品| 欧美gv在线| 成人日韩av| 久久这里只有精品一区二区| 日韩久久99| 免费人成网站在线观看欧美高清| 成人欧美一区二区三区的电影| 国产精品九九| 国产日韩一区| 日韩av二区在线播放| 在线观看亚洲精品福利片| 午夜久久美女| 欧美不卡视频| 91精品婷婷色在线观看| 国产在线观看www| 美腿丝袜亚洲三区| 国产探花在线精品一区二区| 日韩国产欧美一区二区三区| 亚洲精品系列| 亚洲一级大片| 亚州精品视频| 亚洲精品福利| 日韩有吗在线观看| 日韩精品一级二级 | 久久九九精品| 免费看av不卡| 日韩在线视频精品| 手机在线电影一区| 国产一区二区三区久久 | 精品美女久久| 成人高清一区| www.九色在线| 久久久国产精品一区二区中文| 日韩欧美精品| 成人久久一区| 亚洲小说欧美另类婷婷| 激情欧美一区| 欧美午夜不卡| 亚洲制服少妇| 蜜臀久久久久久久| 亚洲一区二区日韩| 日韩欧美四区| 国产乱码精品一区二区三区四区| 欧美亚洲二区| 久久香蕉网站| 久久九九精品| 国产农村妇女精品一二区| 一区二区三区网站| 国产日产一区| 福利在线免费视频| 欧美va天堂| 综合一区av| 国产精品入口久久| 高清一区二区| 极品裸体白嫩激情啪啪国产精品| 在线综合欧美| 91精品视频一区二区| 精品久久视频| 日韩免费高清| 国产精品日韩久久久| 日韩国产欧美在线播放| 久久精品国产99国产| 久久青草久久| 国产精品毛片在线| 欧美在线看片| 国产精品成人一区二区不卡| 999国产精品| 亚洲一二三区视频| 久久男人av| 中文精品视频| 欧美日韩国产一区二区在线观看| 成人午夜网址| 黄色亚洲精品| 日韩美女精品| 国产一区二区三区四区| 一区免费在线| 久久国产人妖系列| 麻豆国产在线| 午夜在线精品偷拍| 国产精品色在线网站| 日韩不卡免费高清视频| 视频一区视频二区中文| 国产精品一页| 亚洲一级影院| 日本视频一区二区| 亚洲一级少妇| 日本v片在线高清不卡在线观看| 四虎成人av| 亚洲专区在线| 麻豆精品蜜桃视频网站| 免费国产自久久久久三四区久久 | 视频一区在线视频| 欧美激情视频一区二区三区免费| 欧美特黄一级大片| 久久国产欧美日韩精品| 国产一区二区三区自拍| 国产精品4hu.www| 99热精品在线观看| 欧美激情麻豆| 日韩精品一级二级| 日韩欧美精品一区| 国产日韩在线观看视频| 精品1区2区3区4区| 韩日一区二区| 亚洲欧洲美洲国产香蕉| 日本蜜桃在线观看视频| 亚洲精品美女91| 欧美日韩国产高清电影| 麻豆一区二区99久久久久| 亚洲欧美日韩国产综合精品二区|