我有问题的OpenAPI java生成器时,有一个定义,其中包含一个模式,如(不幸的是,我得到这个定义从第三方)
"ExtendedBasicdata": {
"type": "object",
"properties": {
"ExtendedBasicData": {
"type": "array",
"items": {
"$ref": "#/definitions/Extendedbasicdata"
}
}
}
},
"Extendedbasicdata": {
"type": "object",
"properties": {
"ID": {
"type": "string"
},
"Country": {
"type": "string"
}
}
},
"objects": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"label": {
"type": "string"
},
"entityId": {
"type": "string"
}
}
},
第一个问题是ExtendedBasicdata和Extendedbasicdata这两个对象只有大小写的区别。生成器只创建了一个名为Extendedbasicdata但类名为ExtendedBasicdata的java文件,这会导致错误Class 'Extendedbasicdata' is public, should be declared in a file named 'Extendedbasicdata.java'
。是否有可能使生成器区分大小写?
第二个问题是generator正在导入java.util.Objects;在默认情况下,因此类Object不能存在。有没有一种方法可以在生成过程中覆盖这个名字?
1条答案
按热度按时间n3schb8v1#
Don't Do This
更改属性大小写
您的
ExtendedBasicdata
类包含一个名为ExtendedBasicData
的Extendedbasicdata
的arrayList。正如本节的标题所说,“不要这样做”。这是一个可怕的设计,正如另一位评论者所说,它也很容易出错。我还假设你为了问题的目的而使用这些名称,它们实际上不是使用的名称,只是相同的基本概念。
第二,属性名应该用camelCase命名。这只是一个标准的命名约定。然而,生成器也知道这一点,并将字段名转换为camelCase。
最后,为了真正回答你的问题,你肯定可以通过mustache templates影响名字的生成方式。具体来说,你可以识别你想要的类和方法,并对它们应用lambda来改变它们的大小写。
覆盖对象
至于
Objects
的问题,您还可以修改所有模板以使用Object的完全限定路径名并删除导入。例如,在
model.mustache
中,可以删除import java.util.Objects;
行,在pojo.mustache
中,修改line311
以使用完全限定名。你将不得不删除每个mustache模板中的每个import语句,并在整个代码中完整地拼写出Object的每个实现的路径。这是一项大量的工作,可以通过重命名属性来轻松解决。
更好的选择
我想重申一遍,我不建议你这么做,我知道你使用的是第三方API,但如果这是真的,这只是他们api的一个小例子,我只能想象还有什么其他问题存在。
一种选择是使用您自己的API定义,并在需要时引用其他定义。
这使您可以使用良好的命名约定,同时仍然依赖于重要对象的其他规范。