Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 除非使用editor.Swagger.io,否则在简单类型上生成Swagger JaxRS规范失败_Java_Jax Rs_Swagger_Swagger Codegen - Fatal编程技术网

Java 除非使用editor.Swagger.io,否则在简单类型上生成Swagger JaxRS规范失败

Java 除非使用editor.Swagger.io,否则在简单类型上生成Swagger JaxRS规范失败,java,jax-rs,swagger,swagger-codegen,Java,Jax Rs,Swagger,Swagger Codegen,我对大摇大摆的YAML和代码生成有意见 我试图从这个非常简单的片段生成代码: swagger: '2.0' info: version: 1.0.0 title: Number API host: localhost basePath: /v2 schemes: - http paths: '/numbers': get: summary: Get number description: Returns a number operation

我对大摇大摆的YAML和代码生成有意见

我试图从这个非常简单的片段生成代码:

swagger: '2.0'
info:
  version: 1.0.0
  title: Number API
host: localhost
basePath: /v2
schemes:
- http
paths:
  '/numbers':
    get:
      summary: Get number
      description: Returns a number
      operationId: getNumber
      produces:
      - application/json
      responses:
        '200':
          description: successful operation
          schema:
            $ref: '#/definitions/Numbers'
definitions:
  Numbers:
    $ref: '#/definitions/Number'
  Number:
    type: number
我使用swagger-codegen-cli-2.2.3.jar执行以下命令:

java -jar swagger-codegen-cli-2.2.3.jar generate -i swagger.yaml -l jaxrs-spec -o ./
现在,预期的输出是一个非常简单的API实现,其中/numbers端点的响应是BigDecimal。我得到了这个,如果我使用的话,它利用了

然而,使用上面的命令,我得到了一个API实现,其中响应尝试返回一个名为“Numbers”的模型。模型实现如下所示:

package io.swagger.model;

import javax.validation.constraints.*;


import io.swagger.annotations.*;
import java.util.Objects;


public class Numbers   {



  @Override
  public boolean equals(java.lang.Object o) {
    if (this == o) {
      return true;
    }
    if (o == null || getClass() != o.getClass()) {
      return false;
    }
    Numbers numbers = (Numbers) o;
    return true;
  }

  @Override
  public int hashCode() {
    return Objects.hash();
  }

  @Override
  public String toString() {
    StringBuilder sb = new StringBuilder();
    sb.append("class Numbers {\n");

    sb.append("}");
    return sb.toString();
  }

  /**
   * Convert the given object to string with each line indented by 4 spaces
   * (except the first line).
   */
  private String toIndentedString(java.lang.Object o) {
    if (o == null) {
      return "null";
    }
    return o.toString().replace("\n", "\n    ");
  }
}
这是不正确的,因为Numbers对象应该简单地转换为BigDecimal,就像Swagger生成器所做的那样

有人能向我解释为什么会发生这种情况,以及我能做些什么使generator cli按预期运行吗

编辑: 我已经研究了editor.swagger.io和codegen cli生成的JSON。来自editor.swagger.io的JSON与生成的代码一起出现在ZIP存档中。看起来是这样的:

package io.swagger.model;

import javax.validation.constraints.*;


import io.swagger.annotations.*;
import java.util.Objects;


public class Numbers   {



  @Override
  public boolean equals(java.lang.Object o) {
    if (this == o) {
      return true;
    }
    if (o == null || getClass() != o.getClass()) {
      return false;
    }
    Numbers numbers = (Numbers) o;
    return true;
  }

  @Override
  public int hashCode() {
    return Objects.hash();
  }

  @Override
  public String toString() {
    StringBuilder sb = new StringBuilder();
    sb.append("class Numbers {\n");

    sb.append("}");
    return sb.toString();
  }

  /**
   * Convert the given object to string with each line indented by 4 spaces
   * (except the first line).
   */
  private String toIndentedString(java.lang.Object o) {
    if (o == null) {
      return "null";
    }
    return o.toString().replace("\n", "\n    ");
  }
}
来自Swagger编辑器JAXRS-SPEC的JSON输出:

{
  "swagger" : "2.0",
  "info" : {
    "version" : "1.0.0",
    "title" : "Number API"
  },
  "host" : "localhost",
  "basePath" : "/v2",
  "schemes" : [ "http" ],
  "paths" : {
    "/numbers" : {
      "get" : {
        "summary" : "Get number",
        "description" : "Returns a number",
        "operationId" : "getNumber",
        "produces" : [ "application/json" ],
        "parameters" : [ ],
        "responses" : {
          "200" : {
            "description" : "successful operation",
            "schema" : {
              "type" : "number"
            }
          }
        }
      }
    }
  },
  "definitions" : {
    "Numbers" : {
      "type" : "number"
    },
    "Number" : {
      "type" : "number"
    }
  }
}
而codegen cli生成的JSON如下所示:

package io.swagger.model;

import javax.validation.constraints.*;


import io.swagger.annotations.*;
import java.util.Objects;


public class Numbers   {



  @Override
  public boolean equals(java.lang.Object o) {
    if (this == o) {
      return true;
    }
    if (o == null || getClass() != o.getClass()) {
      return false;
    }
    Numbers numbers = (Numbers) o;
    return true;
  }

  @Override
  public int hashCode() {
    return Objects.hash();
  }

  @Override
  public String toString() {
    StringBuilder sb = new StringBuilder();
    sb.append("class Numbers {\n");

    sb.append("}");
    return sb.toString();
  }

  /**
   * Convert the given object to string with each line indented by 4 spaces
   * (except the first line).
   */
  private String toIndentedString(java.lang.Object o) {
    if (o == null) {
      return "null";
    }
    return o.toString().replace("\n", "\n    ");
  }
}
来自codegen cli v2.2.3、v2.3.0、github master和所有其他版本的codegen cli的JSON

{
  "swagger" : "2.0",
  "info" : {
    "version" : "1.0.0",
    "title" : "Number API"
  },
  "host" : "localhost",
  "basePath" : "/v2",
  "schemes" : [ "http" ],
  "paths" : {
    "/numbers" : {
      "get" : {
        "summary" : "Get number",
        "description" : "Returns a number",
        "operationId" : "getNumber",
        "produces" : [ "application/json" ],
        "parameters" : [ ],
        "responses" : {
          "200" : {
            "description" : "successful operation",
            "schema" : {
              "$ref" : "#/definitions/Numbers"
            }
          }
        }
      }
    }
  },
  "definitions" : {
    "Numbers" : {
      "$ref" : "#/definitions/Number"
    },
    "Number" : {
      "type" : "number"
    }
  }
}

因此,在Swagger编辑器版本中,REF被转换为简单类型,而REF保留在codegen cli版本中。

如果使用旧版本的编辑器,它会生成
数字
模型,因此我猜这在最新版本的Swagger codegen上已经更改。试试看它是否能与jar for 2.3.0 SNAPSHOT@moondaisy最新版本的2.3.0配合使用,SNAPSHOT也会生成<代码>编号模型。。。据我所见,Swagger编辑器生成JSON,其中$refs被转换为type:number。。我将使用从codegen cli和editor.swagger.io获得的JSON更新我的答案,然后您可能想要打开一个问题