Swagger-UI无法识别application / hal + json

时间:2014-11-04 17:18:50

标签: java spring rest swagger swagger-ui

我有一个用于Spring Boot应用程序的RESTful API。当我试图找出一个涉及尝试添加自定义媒体类型的单独问题时,我遇到了这个问题。

尝试执行此操作后,当我尝试查看API文档时遇到HttpMediaTypeNotAcceptable异常。此异常仅在日志中可见(如果我将级别调高为DEBUG)。在浏览器上,我看到406 undefined。这是一个截图:

enter image description here

我从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 UI在其application/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可能应该将accept标头设置为application/json,application/hal+json,或者使用像application/*+json这样的通配符。

1 个答案:

答案 0 :(得分: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目录下。您应该根据您使用的内容更改值。