首页 > 解决方案 > Spring REST Greeting 服务的简单招摇文档

问题描述

我使用Spring REST 服务实现来学习 Swagger。

GET 服务 - http://localhost:8080/greeting?name=Betlista 返回

{
  "id":5,
   "content":"Hello, Betlista!"
}

所以我为 Swagger 创建了 YAML 文件:

swagger: "2.0"
info:
  version: "0.0.1-SNAPSHOT"
  title: "Spring REST"
host: "localhost:8080"
basePath: "/"
tags:
- name: "Greeting"
schemes:
- "http"
paths:
  /greeting:
    get:
      operationId: "greeting"
      produces:
      - "application/json"
      parameters:
      - name: "name"
        in: "query"
        required: false
        type: "string"
      responses:
        "200":
          description: "successful operation"
          schema:
            $ref: "#/definitions/GreetingResponse"
definitions:
  GreetingResponse:
    type: "object"
    properties:
      id:
        type: "integer"
      content:
        type: "string"

问题是,当我尝试使用“试用”按钮执行它时。

似乎(来自开发者工具中 Chrome 的网络选项卡)好像没有响应:

来自 Swagger 编辑器的电话无法正常工作

...虽然浏览器中的常规调用工作正常

在 Chrome 中工作

编辑:正如我在评论中提到的,我验证了由 swagger 生成的 curl 并且它按预期工作 -curl -X GET "http://localhost:8080/greeting?name=Betlista" -H "accept: application/json"

目前我正在研究 CORS 主题(这对我来说毫无意义,因为文档和服务都在本地主机上),我在 Chrome 控制台中看到:

CORS 错误

标签: swaggerswagger-editor

解决方案


这实际上是服务的问题,而不是 Swagger 编辑器的问题。

我仍在寻找解决方案,此处描述为:

CORS 使用特殊的 HTTP 标头来允许跨域请求。“试用”功能需要 API 响应中的以下标头:

Access-Control-Allow-Origin: https://host.from.which.the.request.came
Vary: Origin
Access-Control-Allow-Credentials: true
Access-Control-Expose-Headers: ResponseHeader1, ResponseHeader2, ...

我尝试使用带有 CORS 的 Spring REST 服务,它curl -I http://localhost:8080/greeting?name=Betlista返回:

HTTP/1.1 200
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 37
Date: Mon, 02 Nov 2020 13:42:15 GMT

但这仍然不起作用......

正如我所说,这不是 Swagger Editor 的问题,而是服务的问题。

CORS 检查可以在 Chrome 中关闭,chrome.exe --disable-web-security --user-data-dir=/tmp如此处所述,这当然不推荐,所以我认为这只是一种解决方法。

我最后使用的是这个 - https://stackoverflow.com/a/47022289/384674

编辑:后来我使用了 - https://stackoverflow.com/a/40300363/384674


推荐阅读