SpringBoot - HttpMessageConverter@RestController中有@ResponseBody溃蔫,可以幫我們把java對(duì)象序列化到resp.body中亡电。@RequestBody可以幫我們把req.body的內(nèi)容轉(zhuǎn)化為java對(duì)象甫恩。HTTP 請(qǐng)求和響應(yīng)是基于文本的瑞妇,意味著瀏覽器和服務(wù)器通過交換原始文本進(jìn)行通信。但是妹田,使用 Spring带膀,controller 類中的方法返回純 ‘String’ 類型和域模型(或其他 Java 內(nèi)建對(duì)象)。如何將對(duì)象序列化/反序列化為原始文本刑枝?這由HttpMessageConverter 處理香嗓。Http請(qǐng)求和響應(yīng)報(bào)文本質(zhì)上都是一串字符串,當(dāng)請(qǐng)求報(bào)文來到j(luò)ava世界装畅,它會(huì)被封裝成為一個(gè)ServletInputStream的輸入流靠娱,供我們讀取報(bào)文。響應(yīng)報(bào)文則是通過一個(gè)ServletOutputStream的輸出流掠兄,來輸出響應(yīng)報(bào)文像云,我們從流中,只能讀取到原始的字符串報(bào)文蚂夕,同樣迅诬,我們往輸出流中,也只能寫原始的字符双抽。而在java世界中百框,處理業(yè)務(wù)邏輯,都是以一個(gè)個(gè)有業(yè)務(wù)意義的對(duì)象為處理維度的牍汹,那么在報(bào)文到達(dá)SpringMVC和從SpringMVC出去铐维,都存在一個(gè)字符串到j(luò)ava對(duì)象的阻抗問題。這一過程慎菲,不可能由開發(fā)者手工轉(zhuǎn)換嫁蛇。HttpMessageConverter 有一下默認(rèn)的converters, 我們也可以定義自己的converter 這里不闡述 注冊(cè)自定義的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會(huì)被remove睬棚,
所以這里你可以在調(diào)用addDefaultHttpMessageConverters
converters.add(getMyMessageConverter());
addDefaultHttpMessageConverters(converters);
}
@Override
protected void extendMessageConverters(List> converters) {
//add自己的,default的會(huì)依然保留解幼, 所以一般我們會(huì)選用這個(gè)方法插入自己的message converters
//這里只能add自定義的converters抑党,例如你add下面的StringHttpMessageConverts就不會(huì)生效, // 會(huì)被他default里面的StringHttpMessageConvertor覆蓋
//converters.add(getMyMessageConverter());
}
}