通过Swagger/OpenApi生成代码时,我想从equals/hascode方法中排除一些属性。
以下是在YAML文件中定义的对象的示例:
ExampleDTO:
type: object
properties:
id:
type: integer
format: int64
property2:
maxLength: 3
minLength: 1
pattern: '[0-9]*'
type: string
property3:
maxLength: 5
minLength: 1
pattern: '[0-9]*'
type: string
下面是生成的等于方法:
@Override
public boolean equals(java.lang.Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
ExampleDTO exampleDTO = (ExampleDTO) o;
return Objects.equals(this.id, ExampleDTO.id) &&
Objects.equals(this.property2, exampleDTO.property2) &&
Objects.equals(this.property3, exampleDTO.property3);
}
问题是,我只希望在等于
方法中使用id属性。我该怎么做?谢谢
假设您使用的是“JavaSpring”生成器,您可以从https://github.com/swagger-api/swagger-codegen/tree/master/modules/swagger-codegen/src/main/resources/JavaSpring并修改,例如,https://github.com/swagger-api/swagger-codegen/blob/master/modules/swagger-codegen/src/main/resources/JavaSpring/pojo.mustache.
模板中的方法生成如下所示:
@Override
public boolean equals(java.lang.Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}{{#hasVars}}
{{classname}} {{classVarName}} = ({{classname}}) o;
return {{#vars}}Objects.equals(this.{{name}}, {{classVarName}}.{{name}}){{#hasMore}} &&
{{/hasMore}}{{/vars}}{{#parent}} &&
super.equals(o){{/parent}};{{/hasVars}}{{^hasVars}}
return super.equals(o);{{/hasVars}}
}
然后,在运行“swagger codegen maven插件”时,可以传递templateDirectory属性以指示模板的位置。
<templateDirectory>myTemplateDir</templateDirectory>
正如插件主页中所述:
修改客户端库格式
不喜欢默认的swagger客户端语法?想要支持不同的语言吗?没问题!Swagger Codesen使用justache引擎处理小胡子模板。您可以修改我们的模板或制作自己的模板。
您可以查看模块/swagger-coode en/src/main/Resources/${your-Language}以获取示例。要制作自己的模板,请创建自己的文件并使用-t标志指定模板文件夹。它实际上就是这么简单。
这种方法的问题是会影响所有“Pojo”对象。
如果您想要更细粒度的生成,那么您需要自定义自己的生成器,例如扩展现有的生成器(如JavaSpring)并在
<language>com.my.package.for.GeneratorLanguage</language>
就像这里通知的一样。
在这种情况下,您需要更改模板,以便它们可以处理创建类的特定处理。
我已经试过了,但是Swagger UI不能渲染它,所以我猜测它是错误的:
问题内容: 我已经创建了下面的对象,该对象将被映射到ElasticSearch类型。我想从索引中排除该属性: 问题答案: 您应该能够设置属性的值,如下所示:
我想从类型中排除一个单独的属性。我该怎么做呢? 比如我有 我想排除属性 以获得
我正在尝试使用https://github.com/pseudomuto/protoc-gen-doc,我无法找到在消息中排除grpc服务/字段的一些API的方法。 在swagger中找到了相关的样式,但似乎找不到将其添加到Pro buf文件中的方法http://watson-developer-cloud.github.io/api-guidelines/swagger-coding-style
我找不到如何在AspectJ1.9.1中排除所有final方法。我在这里找到了早期版本的答案,但我无法使其工作。
我们如何排除模型中“groovy”类的元类属性作为响应?我有一个Jax-Rs资源,它返回一个带swagger@ApiModel注释的groovy对象。我在swagger ui中看到了太多时髦的特定属性。如何从序列化中排除它? 它似乎在使用Jackson进行pogo json序列化?如何注释我的groovy类,将元类属性排除在json序列化字符串中?我试着使用JsonIgnoreProperties