【问题标题】:Swagger-UI doesn't recognize application/hal+jsonSwagger-UI 无法识别 application/hal+json
【发布时间】:2014-11-04 17:18:49
【问题描述】:

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

尝试执行此操作后,当我尝试查看我的 API 文档时,我收到了 HttpMediaTypeNotAcceptable 异常。此异常仅在日志中可见(如果我将级别提高到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 UI 在其 Accept: 标头中有 application/jsonhttp://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 这样的通配符。

【问题讨论】:

    标签: java spring rest swagger swagger-ui


    【解决方案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 目录下用于构建过程。您应该根据您使用的内容更改该值。

    【讨论】:

    • 这确实暂时解决了问题。非常感谢!我仍然需要弄清楚为什么所有其他消息转换器也会被吹走。
    • 当前版本的链接失效。有人对当前版本有修复吗?
    • @MichalPaszkiewicz - 从那以后代码发生了显着变化(应该使用指向直接哈希的链接,我很抱歉)。现在找到位置需要我一点时间,但我不确定当前版本是否仍然存在问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 2017-09-05
    • 1970-01-01
    • 2019-10-23
    相关资源
    最近更新 更多