我有用于 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
我的自定义媒体类型。所以发生的事情是 Spring 根本找不到兼容的媒体类型,因为 Swagger UIapplication/json
在其Accept:
标题中包含而http://localhost:8080/api-docs
出售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 可能应该将接受标头设置为application/json,application/hal+json
或者使用通配符,例如application/*+json
.