如何从Swagger yaml获取JSON中的请求主体和响应主体

时间:2018-03-09 01:41:30

标签: yaml swagger

这是我的代码:

public static void main(String[] args) {
    Swagger swagger = new SwaggerParser().read("D:\\espace201612\\rest-services.yaml");
    Map<String, Path> paths = swagger.getPaths();
    for (Map.Entry<String, Path> p : paths.entrySet()) {
      Path path = p.getValue();
      Map<HttpMethod, Operation> operations = path.getOperationMap();
      for (Entry<HttpMethod, Operation> o : operations.entrySet()) {
        System.out.println("===");
        System.out.println("PATH:" + p.getKey());
        System.out.println("Http method:" + o.getKey());
        System.out.println("Summary:" + o.getValue().getSummary());
        System.out.println("Parameters number: " + o.getValue().getParameters().size());
        for (Parameter parameter : o.getValue().getParameters()) {
          System.out.println(" - " + parameter.getName());
        }
        System.out.println("Responses:");
        for (Map.Entry<String, Response> r : o.getValue().getResponses().entrySet()) {
          System.out.println(" - " + r.getKey() + ": " + r.getValue().getDescription());
        }
        System.out.println("");
      }

    }
  }

这是我的输出:

===
PATH:/tenantconsolewebsite/v1
Http method:GET
Summary:查询是否部署成功
Parameters number: 0
Responses:
 - 200: Get Service Information
 - 400: 参数错误
 - 403: URL鉴权
 - 404: rest接口没找到
 - 406: 流控限流
 - 500: 默认ServiceException异常码,应用内部错误
 - 502: 网关错误
 - 503: 服务不可用
 - 504: 表示时间超时,总线超时时间300s
 - 888: 服务摘机,不提供服务

===
PATH:/tenantconsolewebsite/v1/orders
Http method:POST
Summary:查询订单列表
Parameters number: 1
 - orderRequest
Responses:
 - 200: 订单列表查询结果

===
PATH:/tenantconsolewebsite/v1/order/{orderID}
Http method:POST
Summary:null
Parameters number: 2
 - orderID
 - orderDetailsRequest
Responses:
 - 200: 订单详情查询结果

这是我的yaml文件:

# 服务生成默认接口定义文件  
---
swagger: '2.0'
# 服务基本信息定义,包括服务名称,版本,服务描述(包括SLA),服务Owner
info:
  # 服务接口版本
  version: v1
  # 定义服务名称
  title: TenantConsoleWebsite
  # 描述服务提供的功能、限制、注意事项、服务的SLA等
  description: |
    默认生成yaml文件提供了默认接口,用于检查应用部署是否成功

    ** 服务SLA:**a

    |SLA项|定义|
    |-----|-----|
    |请求成功率| >=99.9%|
    |可用性|Tair1|
    |数据一致性|最终一致,不一致时长<1分钟|
    |吞吐量|4000tps|
    |TP50请求时延|2ms|
    |TP99.9请求时延|5ms|
  # 声明服务维护人员信息  
  contact:
    name: xxxx
    email: xxxxx
schemes:
  - https
# Base PATH, 完整的访问路径为 basePath + path
basePath: /rest
paths:
  # 资源URL定义,服务生成默认接口,用于检查应用部署是否成功
  /tenantconsolewebsite/v1:
    # GET方法定义
    get:
      summary: '查询是否部署成功'
      description: '查询是否部署成功'
      tags:
        - TenantConsoleWebsite    # 用于代码生成,声明方法所在类名称
      operationId: getServiceInfo  # 用于代码生成,声明方法名称
      produces:
        - application/json  # 声明返回Json格式数据
      responses:
        200:
          description: Get Service Information
          schema:  # 声明返回值Schema
            type: string  # 直接返回简单String类型数据
        400:
          description: '参数错误'
        403:
          description: 'URL鉴权'
        404:
          description: 'rest接口没找到'
        406:
          description: '流控限流'
        500:
          description: '默认ServiceException异常码,应用内部错误'
        502:
          description: '网关错误'
        503:
          description: '服务不可用'
        504:
          description: '表示时间超时,总线超时时间300s'
        888:
          description: '服务摘机,不提供服务'
  #查询订单列表
  /tenantconsolewebsite/v1/orders:
    # POST方法
    post: 
      summary: '查询订单列表'
      tags: 
        - TenantConsoleWebsite
      operationId: getOrders
      produces:
        - application/json
      parameters:
        - name: orderRequest
          in: body
          required: true
          schema: 
            $ref: '#/definitions/OrderRequest'
      responses:
        '200':
          description: 订单列表查询结果
          schema: # 声明返回值Schema
            type: array
            items:
              $ref: '#/definitions/Order'
  #查询订单详情
  /tenantconsolewebsite/v1/order/{orderID}:
    # post方法
    post:
      tags: 
        - TenantConsoleWebsite
      operationId: getOrderDetails
      produces:
        - application/json
      parameters: 
        - name: orderID
          in: path
          required: true
          type: string 
        - name: orderDetailsRequest
          in: body
          required: true
          schema: 
            $ref: '#/definitions/OrderDetailsRequest'
      responses:
        '200':
          description: 订单详情查询结果
          schema: # 声明返回值Schema
            $ref: '#/definitions/OrderDetails'

definitions:
  ServiceInfo:
    properties:
      serviceName:
        type: string
      serviceVersion:
        type: string
      serviceOwner:
        type: string
  #订单相关数据结构
  OrderRequest: 
    properties: 
      orderQueryCond:
        type: object
        $ref: '#/definitions/OrderQueryCond'
      pageNum: 
        type: integer
      pageSize:
        type: integer
  OrderQueryCond:
    properties: 
      orderUserID:
        type: string
      orderBeginDate:
        type: string
        format: date-time
      orderType: 
        type: string
      status: 
        type: string
  Order: 
    properties: 
      orderID: 
        type: string
      orderUserID: 
        type: string
      createUserID: 
        type: string
      status: 
        type: integer
      currency: 
        type: integer
      totalAmount: 
        type: integer
        format: int64
      createTime: 
        type: string
        format: date-time
      extInfo: 
        type: object
        $ref: '#/definitions/OrderExtInfo'
  OrderExtInfo:
    properties: 
      orderUserInfo: 
        type: object
        $ref: '#/definitions/OrderUserInfo'
      contactPersonInfo: 
        type: array
        items: 
          $ref: '#/definitions/ContactPersonInfo'
  OrderUserInfo: 
    properties: 
      name: 
        type: string
  ContactPersonInfo: 
    properties: 
      contactPersonId:
        type: string
      name: 
        type: string
      mobilePhone: 
        type: string
      email: 
        type: string
  OrderDetailsRequest: 
    properties: 
      orderUserID: 
        type: string
  OrderDetails: 
    properties: 
      orderID: 
        type: string
      orderUserID: 
        type: string
      createUserID: 
        type: string
      status: 
        type: integer
      orderItems: 
        type: array
        items: 
          $ref: '#/definitions/OrderItem'
      currency: 
        type: integer
      totalAmount: 
        type: integer
        format: int64
      createTime: 
        type: string
        format: date-time
      extInfo: 
        type: object
        $ref: '#/definitions/OrderExtInfo' 
  OrderItem: 
    properties: 
      orderItemID: 
        type: string
      itemOfferingInst: 
        type: array
        items: 
          $ref: '#/definitions/itemOfferingInstItem'
      quantity:
        type: integer
      currency:
        type: integer
      amount:
        type: integer
        format: int64
  itemOfferingInstItem: 
    properties:
      offeringInst:
        type: object
        $ref: '#/definitions/OfferingInst'
  OfferingInst: 
    properties: 
      offeringInstID: 
        type: string
      offeringID: 
        type: string
      offeringName: 
        type: string
      effectiveDate:
        type: string
        format: data-time 
      expiryDate: 
        type: string
        format: data-time
      itemObjectAttr: 
        type: object
        $ref: '#/definitions/ItemObjectAttr' 
      extOfferingInstID: 
        type: string
      subProductInsts:
        type: array
        items:  
          $ref: '#/definitions/ProductInst'
  ProductInst: 
    properties: 
      productInstID:
        type: string
      productID:
        type: string
      productName:
        type: string
      effectiveDate:
        type: string
        format: data-time
      expiryDate:
        type: string
        format: data-time
      edition:
        type: object
        $ref: '#/definitions/Edition' 
      extProdInstInfo: 
        type: object
        $ref: '#/definitions/ExtProdInstInfo' 
  Edition: 
    properties: 
      editionCode:
        type: string 
      feature: 
        type: array
        items: 
          $ref: '#/definitions/Feature' 
      resources: 
        type: array
        items: 
          $ref: '#/definitions/Resources'
  ExtProdInstInfo: 
    properties: 
      url: 
        type: string
      acctnum:
        type: string
      password: 
        type: string
  ItemObjectAttr:
    properties: 
      attrId:
        type: integer
        format: int64
      attrCode:
        type: string
      sValue:
        type: string
      attachInsType:
        type: string
      attachInstId:
        type: integer
        format: int64
  Feature:
    properties: 
      attrCode: 
        type: string
      attrValue: 
        type: string
  Resources:
    properties: 
      resName:
        type: string
      resValue: 
        type: string

但我的输出对我来说还不够。我也想得到请求和响应体。例如,在/ tenantconsolewebsite / v1中,它是一个get方法,所以我没有请求。它的响应是字符串类型。在tenantconsolewebsite / v1 / orders中,它的请求体是orderRequest模型(或示例),它的响应也是我的输出中未显示的模型(或示例)。

0 个答案:

没有答案