Spring Boot アプリケーション用の RESTful API があります。カスタムメディアタイプを追加しようとすることに関連する別の問題を理解しようとしていたときに、これに遭遇しました。
これを実行しようとした後HttpMediaTypeNotAcceptable
、API ドキュメントを表示しようとすると例外が発生しました。この例外は、ログにのみ表示されます (レベルを に上げた場合DEBUG
)。ブラウザに が表示されます406 undefined
。スクリーンショットは次のとおりです。
Spring Boot のログから得られる例外は次のとおりです。
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
私のカスタム メディア タイプのみが含まれます。application/json
したがって、Swagger UIのAccept:
ヘッダーにhttp://localhost:8080/api-docs
ベンドがあるため、Spring は互換性のあるメディア タイプをまったく見つけることができませんapplication/hal+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
Swagger UI はおそらく accept ヘッダーを に設定するapplication/json,application/hal+json
か、または のようなワイルドカードを使用する必要があると思いapplication/*+json
ます。