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
。我很高兴我提供了帮助。