SpringBoot - HttpMessageConverter

SpringBoot - HttpMessageConverter@RestController中有@ResponseBody,可以幫我們把java對象序列化到resp.body中。@RequestBody可以幫我們把req.body的內(nèi)容轉(zhuǎn)化為java對象。HTTP 請求和響應是基于文本的,意味著瀏覽器和服務器通過交換原始文本進行通信。但是,使用 Spring,controller 類中的方法返回純 ‘String’ 類型和域模型(或其他 Java 內(nèi)建對象)。如何將對象序列化/反序列化為原始文本?這由HttpMessageConverter 處理。Http請求和響應報文本質(zhì)上都是一串字符串,當請求報文來到j(luò)ava世界,它會被封裝成為一個ServletInputStream的輸入流,供我們讀取報文。響應報文則是通過一個ServletOutputStream的輸出流,來輸出響應報文,我們從流中,只能讀取到原始的字符串報文,同樣,我們往輸出流中,也只能寫原始的字符。而在java世界中,處理業(yè)務邏輯,都是以一個個有業(yè)務意義的對象為處理維度的,那么在報文到達SpringMVC和從SpringMVC出去,都存在一個字符串到j(luò)ava對象的阻抗問題。這一過程,不可能由開發(fā)者手工轉(zhuǎn)換。HttpMessageConverter 有一下默認的converters, 我們也可以定義自己的converter 這里不闡述 注冊自定義的converter.

package spring.config;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
import spring.filter.MyFilter;import spring.filter.MyFilter1;
import java.nio.charset.Charset;import java.util.List;
/** * @Title: WebConfig* @Description: * @author yc36994 * @date Jul 29, 2020 * @version 1.0 */
@Configuration
public class WebConfig extends WebMvcConfigurationSupport{
@Bean
public StringHttpMessageConverter getMyMessageConverter(){
return new StringHttpMessageConverter(Charset.forName("UTF-8"));
}
@Override
protected void configureMessageConverters(List> converters) {
//add自己的converters,所有default的converters會被remove,
所以這里你可以在調(diào)用addDefaultHttpMessageConverters

converters.add(getMyMessageConverter());
addDefaultHttpMessageConverters(converters);
}
@Override
protected void extendMessageConverters(List> converters) {
//add自己的,default的會依然保留, 所以一般我們會選用這個方法插入自己的message converters
//這里只能add自定義的converters,例如你add下面的StringHttpMessageConverts就不會生效, // 會被他default里面的StringHttpMessageConvertor覆蓋
//converters.add(getMyMessageConverter());
}
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容