1. 程式人生 > >SpringBoot整合Swagger問題整理

SpringBoot整合Swagger問題整理

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