Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.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 由于字段以下划线开头而导致的Swagger codegen编译问题_Java_Swagger_Swagger Codegen_Openapi Generator - Fatal编程技术网

Java 由于字段以下划线开头而导致的Swagger codegen编译问题

Java 由于字段以下划线开头而导致的Swagger codegen编译问题,java,swagger,swagger-codegen,openapi-generator,Java,Swagger,Swagger Codegen,Openapi Generator,我有以下openApi定义,请注意type和\u type字段: openapi: 3.0.1 info: title: 'title' description: 'description' version: 1.0.0 paths: /pet: get: responses: 200: description: successful operation content: appl

我有以下
openApi
定义,请注意
type
\u type
字段:

openapi: 3.0.1
info:
  title: 'title'
  description: 'description'
  version: 1.0.0
paths:
  /pet:
    get:
      responses:
        200:
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Pet'
components:
  schemas:
    Pet:
      type: object
      properties:
        type:
          type: string
        _type:
          type: string
当我尝试使用上述方法生成Java客户机时,我在
io.swagger.client.model.Pet中得到了以下结果

公共级宠物{
...
/**
*获取类型
*@返回类型
**/
@架构(description=”“)
公共字符串getType(){
返回类型;
}
公共void集合类型(字符串类型){
this.type=type;
}
公共宠物类型(字符串类型){
这个。_type=_type;
归还这个;
}
/**
*获取类型
*@return\u类型
**/
@架构(description=”“)
公共字符串getType(){
返回型;
}
公共void集合类型(字符串类型){
这个。_type=_type;
}
...
}
由于方法
getType
setType
重复,因此不会编译。如何更新我的
openApi
以避免这种情况

我不在乎使用什么getter/setter方法,但是我不能更改字段名

这可以通过使用复制


更新:我已经从我最初发布的内容中简化了我的问题,其中包括生成
openApi
定义l的java类。

解析属性名称时(由
PropertyNameingStrategy
完成),就会出现这个问题。因此,通常可以跳过第一个
。例如,
PropertyNamingStrategy.SNAKE\u案例
使用:

private static String toSnakeCase(String input) {
            if (input == null) return input;
            int length = input.length();
            StringBuilder result = new StringBuilder(length * 2);
            int resultLength = 0;
            boolean wasPrevTranslated = false;
            for (int i = 0; i < length; i++) {
                char c = input.charAt(i);
                if (i > 0 || c != '_') // skip first starting underscore
                {
                    if (Character.isUpperCase(c)) {
                        if (!wasPrevTranslated && resultLength > 0 && result.charAt(resultLength - 1) != '_') {
                            result.append('_');
                            resultLength++;
                        }
                        c = Character.toLowerCase(c);
                        wasPrevTranslated = true;
                    } else {
                        wasPrevTranslated = false;
                    }
                    result.append(c);
                    resultLength++;
                }
            }
            return resultLength > 0 ? result.toString() : input;
        }

 
private静态字符串toSnakeCase(字符串输入){
如果(输入==null)返回输入;
int length=input.length();
StringBuilder结果=新的StringBuilder(长度*2);
int resultLength=0;
布尔值=false;
for(int i=0;i0 | | c!=''.')//跳过第一个起始下划线
{
if(字符.大写(c)){
如果(!wasPrevTranslated&&resultLength>0&&result.charAt(resultLength-1)!='\u'){
结果。追加(“”);
resultLength++;
}
c=字符。toLowerCase(c);
WASPREV=真;
}否则{
WASPREV=假;
}
结果:追加(c);
resultLength++;
}
}
返回resultLength>0?结果.toString():输入;
}

这可能会为您提供有关属性名称解析工作原理的线索。

您是否使用联机客户端或其他库,正确生成它们?I“我使用maven包
io.swagger.core.v3::swagger-jaxrs2::2.1.4
生成我的
openApi.json
文件,然后
io.swagger.codegen.v3::swagger-codegen-maven插件::3.0.22
codegen
@Aman我已经在editor.swagger.io中很容易地更新了我的问题。谢谢你指出这一点。这是一个很棒的资源。我想问题不在于
大摇大摆的codegen
,而在于
杰克逊
。很久以前,我对春天也有同样的问题。我不知道如何将其应用于此场景。检查此处问题在于
招摇过市codegen
,因为如果一个属性以
开头,它无法处理两个唯一属性的情况。我已经更新了我的问题以删除Jackson注释,因为任何
openApi
都可能发生上述情况。如果我可以更改
@JsonProperty(“\u type”)
中使用的名称,我就可以避免这个问题。但是,由于所讨论的API正在使用中,更改属性名称不是一个选项。这非常有用!我将尝试实现我自己的
ModelConverter
。我很高兴我提供了帮助。