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());
}
}