關於springmvc的消息轉換器


之前有用到消息轉換器,一直是配置configureMessageConverters()這個方法的,雖然知道也有extendMessageConverters()。它們的區別的是第一個不會繼承框架默認的消息轉換器,第二個是繼承了的。也就是說使用第一種方法配置就只有方法里面自己配置的消息轉換器,而是用第二種則除了自己配置的還有框架自帶的。

坑就在這里,一直用的是configureMessageConverters()配置,但是之前寫項目使用configureMessageConverters()配置,發現有問題——圖片顯示不出來,不配置消息轉換器,圖片是有的,但是日期是json,配置后,日期是有了,圖片不見了(代碼debug沒有報錯)。后來百度到別人的一個配置用extendMessageConverters(),雖然解決了目前的這個問題,但后面又出了別的轉換問題——忘了是什么問題,尷尬。

知道現在知道了extendMessageConverters()其實是有優先級問題的,它原本有自帶的jackson轉換器,如果要用自己的話就得把自己的轉換器在它之前調用,設置優先級是數字越小優先級越高。(其實我沒具體試過數字,但應該是這樣的)

我們先看兩段代碼:

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.setDateFormat(sdf);
        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(objectMapper);
        converters.add(converter);

    // 即使下方這段代碼刪了,后面截圖的圖片的結果還是一樣的,這里主要是為了不讓以為是UTF-8造成圖片顯示不出來 StringHttpMessageConverter stringHttpMessageConverter
= new StringHttpMessageConverter(Charset.forName("UTF-8")); stringHttpMessageConverter.setWriteAcceptCharset(false); converters.add(stringHttpMessageConverter); }

 

@Override
    public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.setDateFormat(sdf);
        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(objectMapper);
        //通過設置索引,讓自己的轉換器放在最前面,否則默認的jackson轉換器會在前面,用不上我們設置的轉換器.
        converters.add(0, converter);
    }

然后再看兩端代碼相對應的瀏覽器

 

 

 

 

可以看到兩個相應頭的content-type是不一樣的,一個是text/html,一個是image/png。

最后再試着把extendMessageConverters()的優先級刪除,結果是圖片正常顯示,json日期轉換失敗

還是從1770開始的ms數。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM