2014-11-04 83 views
1

我擁有適用於Spring Boot應用程序的RESTful API。當我試圖找出涉及嘗試添加自定義媒體類型的單獨問題時,我遇到了這個問題。Swagger-UI無法識別應用程序/ hal + json

嘗試完成此操作後,我在嘗試查看我的API文檔時遇到了HttpMediaTypeNotAcceptable異常。此例外情況僅在日誌中可見(如果將等級升至DEBUG)。在瀏覽器上我看到406 undefined。下面是截圖:

enter image description here

我從春天啓動的日誌中獲取的例外情況是這樣的:

2014-11-04 10:08:26.189 DEBUG 5496 --- [nio-8080-exec-9] .w.s.m.s.DefaultHandlerExceptionResolver : Resolving exception from handler [public org.springframework.http.ResponseEntity<com.wordnik.swagger.model.ResourceListing> com.mangofactory.swagger.controllers.DefaultSwaggerController.getResourceListing(java.lang.String)]: org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation 

問題的根源在於現有的,可生產的媒體類型將被覆蓋。

如果沒有上面的代碼,列表中包含:

  • application/hal+json
  • application/json;charset=UTF-8
  • application/*+json;charset=UTF-8

隨着我的更改,列表只包含application/hal+json和我的自定義媒體類型。那麼,什麼情況是,Spring能根本找不到一個兼容的媒體類型,因爲揚鞭UI在其Accept:頭而http://localhost:8080/api-docs售貨application/hal+jsonapplication/json(我驗證了使用curl):

HTTP/1.1 200 OK 
Server: Apache-Coyote/1.1 
X-Content-Type-Options: nosniff 
X-XSS-Protection: 1; mode=block 
Cache-Control: no-cache, no-store, max-age=0, must-revalidate 
Pragma: no-cache 
Expires: 0 
X-Frame-Options: DENY 
X-Application-Context: application 
Content-Type: application/hal+json 
Transfer-Encoding: chunked 
Date: Tue, 04 Nov 2014 16:56:57 GMT 

我猜揚鞭UI應可能會將accept標頭設置爲application/json,application/hal+json,或者可能使用通配符application/*+json

回答

1

當前的解決方案是更新swagger-client.js - 構建SwaggerClient的部分,它使用application/json作爲mime類型進行硬編碼。

當前的代碼行是https://github.com/swagger-api/swagger-ui/blob/master/dist/lib/swagger-client.js#L335,雖然這可能會在不同版本中發生明顯變化(因此在閱讀此答案時未來可能無關)。

swagger-client.js存在於兩個地方 - 預構建應用程序的/ dist/lib目錄或直接在構建過程的/ lib目錄下。您應該根據您使用的內容更改值。

+0

這確實解決了目前的問題。謝謝一堆!我仍然需要弄清楚爲什麼所有其他消息轉換器都被吹走了。 – 2014-11-04 19:53:36

+0

鏈接在當前版本中被打破。有沒有人有當前版本的修復? – 2015-11-30 12:05:42

+0

@MichalPaszkiewicz - 代碼已經顯着改變(應該使用鏈接直接散列,我的道歉)。現在查找位置會花費一些時間,但我不確定當前版本中是否仍存在問題。 – Ron 2015-11-30 16:19:17

相關問題