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

标签 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 在其 Accept: header 中有 application/json,而 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 这样的通配符。

最佳答案

当前的解决方案是更新 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 目录。您应该根据您使用的内容更改该值。

关于java - Swagger-UI 无法识别 application/hal+json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26741167/

相关文章:

java - spring boot - 应用程序启动两次..?

java - 没有合格的 bean - FxWeaver 和 Spring Boot

java - 我如何区分两个端点,每个端点都有一个 PathVariable?

java - 天气休息服务

java - 正在创建 Spring 多个 bean 实例

java - 如何确保 Java 对象(包含加密 Material )被归零?

rest - 在基于服务器的代理中使用 REST 服务

python - 如何向 Flask Restful 服务构造函数发送参数?

java - 带有连接池示例的 ClassNotFoundException (org.postgresql.Driver)

java - 隐藏数组适配器中的元素,而不是删除它们