SpringBoot整合Swagger問題整理
阿新 • • 發佈:2018-12-09
1、swagger版本與springboot版本
本專案使用的是Swagger版本是2.7.0,該版本對應的spring版本是4.3.10,所使用的SpringBoot版本在1.5.6.RELEASE版本左右都是可以的。一般版本差距太大才會導致衝突。
檢視控制檯並無報錯,檢視log日誌也無明顯錯誤資訊,訪問http://localhost:8080/v2/api-docs發現有返回值但是隻有一個key為value的json串返回,因此有可能是對返回值處理時出現了問題。查詢資料得知有可能有fastjson有關,而專案中之前為了處理返回日期型別為時間戳,自定義了HttpMessageConverter,裡面有用到fastjson包中JSON物件,註解掉相關程式碼:
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
super.configureMessageConverters(converters);
converters.add(responseBodyConverter());
// converters.add(new MappingHttpMessageConverter());
}
重啟伺服器可正常顯示,不過時間日期返回變為時間戳。
3、SpringBoot整合Swagger後時間日期返回設定格式
網上有多種解決方案,這裡找到了一種相同簡便且可行的方案,採用FastJsonHttpMessageConverter進行訊息轉化,如下所示:
@Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { super.configureMessageConverters(converters); converters.add(responseBodyConverter()); // 1.定義一個convert 轉換訊息的物件 FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter(); // 2 新增fastjson 的配置資訊 比如 是否要格式化 返回的json資料 FastJsonConfig fastJsonConfig = new FastJsonConfig(); fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat); fastJsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss"); fastConverter.setFastJsonConfig(fastJsonConfig); // 解決亂碼的問題 List<MediaType> fastMediaTypes = new ArrayList<>(); fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8); fastConverter.setSupportedMediaTypes(fastMediaTypes); converters.add(fastConverter); }
利用FastJsonConfig可設定日期的格式,經測試可行。
4、關於頁面空白需新增靜態資源對映問題
本專案未遇到該問題,經測試是否新增都不會產生影響,這裡只貼出該配置程式碼,如有遇到相似問題也可嘗試:
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("swagger-ui.html")
.addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars*//**")
.addResourceLocations("classpath:/META-INF/resources/webjars/");
super.addResourceHandlers(registry);
}