此文已由做者易國強受權網易雲社區發佈。
html
歡迎訪問網易雲社區,瞭解更多網易技術產品運營經驗。web
在默認狀況下Spring Boot 的MVC框架使用的視圖解析ViewResolver類是ContentNegotiatingViewResolver,這個解析器比較智能,它會根據你的請求類型(通常以請求uri的後綴來區分或請求頭的Accept獲得)來自動選擇返回的數據文檔類型。spring
通常狀況下,這個能知足大部分人的使用需求,但咱們這裏只是須要提供RESTful接口的話,那麼這個解析規則就不太適合咱們了,好比說咱們的心跳檢測controller中若是返回的是非字符串類型的數據(字符串默認是能夠解析成功的),那麼就會提示解析失敗的錯誤,json
或以下的異常信息:安全
org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation ....
在這裏咱們能夠在主入口類中繼承WebMvcConfigurerAdapter類,修改默認視圖解析的解析規則,示例以下所示,這裏favorPathExtension方法表示是否支持後綴匹配,咱們這裏直接設置爲false便可實現咱們的需求,其餘不作任何修改,那麼咱們的因此返回結果會根據自定義的解析策略返回jackson解析的json格式數據。框架
@SpringBootApplicationpublic class BingoWebApplication extends WebMvcConfigurerAdapter { public static void main(String[] args) { SpringApplication.run(BingoWebApplication.class, args); } @Override public void configureContentNegotiation(ContentNegotiationConfigurer configurer) { configurer.favorPathExtension(false); } }
上面代碼中提到ContentNegotiationConfigurer 這個配置類還能夠自定義不少解析的規則,好比ignoreAcceptHeader方式設置是否匹配請求頭的信息,defaultContentType方法設置默認匹配類型等等。具體你們能夠本身試下。ide
另外,若是咱們須要自定義其餘解析器,好比咱們經常使用的freemarker的解析器,那麼也很簡單,咱們仍然能夠在主入口類中繼承WebMvcConfigurerAdapter類或自定義一個類繼承WebMvcConfigurerAdapter類,但須要注意自定義類須要加上@Configuration的註解,而後在裏面咱們實例化一個視圖解析的bean便可。以下所示:spring-boot
@Beanpublic FreeMarkerViewResolver getFreeMarkerViewResolver(){ FreeMarkerViewResolver resolver = new FreeMarkerViewResolver(); resolver.setPrefix(""); resolver.setSuffix(".ftl"); resolver.setContentType("text/html; charset=UTF-8"); resolver.setRequestContextAttribute("rc"); return resolver; }
上面的代碼很簡單,實際和咱們平時在xml中配置的視圖解析配置同樣。這個Bean實際是覆蓋了默認的viewResolver,達到了自定義解析的目的。spa
上面簡單介紹了若是須要自定義freemarker的視圖解析該如何配置,實際上還有另外的方法,spring boot 其實已經幫咱們作了不少事情,好比說它集成了freemarker的功能,那麼咱們只須要引入相關的依賴便可達到咱們的目的,在pom文件中加入以下依賴:orm
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId></dependency>
加入上述依賴便可正常使用freemarker的功能,默認狀況下無需其餘的配置,咱們的靜態文件能夠放在工程的static目錄,模板文件則放在templates目錄下便可,這兩個目錄在咱們新建工程的時候就自動幫我建立完成了,若是不是採用的框架自動建立的,那麼手動建立此目錄便可,固然你能夠設置其餘自定義的存放目錄,在覈心配置文件中自定義設置便可,好比設定ftl文件路徑 :spring.freemarker.template-loader-path=classpath:/templates
不足之處,歡迎指正,謝謝~
更多網易技術、產品、運營經驗分享請點擊。
相關文章:
【推薦】 認識用戶訪談