HttpMessageConverter 自定義轉換器 三種方式

添加一個converter的方式有三種(實例中 JavaSerializationConverter 爲自定義類)

其中,configureMessageConverters 與 extendMessageConverters 它們的區別的是第一個不會繼承框架默認的消息轉換器,第二個是繼承了的。也就是說使用第一種方法配置就只有方法裏面自己配置的消息轉換器,而是用第二種則除了自己配置的還有框架自帶的。

    // 添加converter的第一種方式,代碼很簡單,單個轉換類的化也是推薦的方式,如果是多個,則推薦下面兩種
    // 這樣做springboot會把我們自定義的converter放在順序上的最高優先級(List的頭部)
    // 即有多個converter都滿足Accpet/ContentType/MediaType的規則時,優先使用我們這個
@Bean public JavaSerializationConverter javaSerializationConverter() {
     
return new JavaSerializationConverter(); } // 添加converter的第二種方式 // 通常在只有一個自定義WebMvcConfigurerAdapter時,會把這個方法裏面添加的converter(s)依次放在最高優先級(List的頭部) // 雖然第一種方式的代碼先執行,但是bean的添加比這種方式晚,所以方式二的優先級 大於 方式一 @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { // add方法可以指定順序,有多個自定義的WebMvcConfigurerAdapter時,可以改變相互之間的順序 // 但是都在springmvc內置的converter前面 converters.add(new JavaSerializationConverter()); } // 添加converter的第三種方式 // 同一個WebMvcConfigurerAdapter中的configureMessageConverters方法先於extendMessageConverters方法執行 // 可以理解爲是三種方式中最後執行的一種,不過這裏可以通過add指定順序來調整優先級,也可以使用remove/clear來刪除converter,功能強大 // 使用converters.add(xxx)會放在最低優先級(List的尾部) // 使用converters.add(0,xxx)會放在最高優先級(List的頭部) @Override public void extendMessageConverters(List<HttpMessageConverter<?>> converters) { converters.add(new JavaSerializationConverter()); }

參考文檔:

https://www.cnblogs.com/page12/p/8166935.html

https://www.cnblogs.com/woyujiezhen/p/12105852.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章