由 openapi-generator maven 插件生成的 Java 类表现出一个值得注意的问题:
使用非标准注释,例如
@javax.annotation.Nonnull
或 @javax.annotation.Nullable
中的 com.google.code.findbugs:jsr305:3.0.2
。
重现步骤:
openapi-generator-maven-plugin
版本7.5.0OpenAPI声明文件:
{
"openapi": "3.1.0",
"info": {
"title": "Sample contract",
"version": "1.0.0"
},
"paths": {},
"components": {
"schemas": {
"Request": {
"type": "object",
"required": ["token"],
"properties": {
"token": {
"type": "string"
}
}
}
}
}
}
生成的java类:
package com.sample;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.StringJoiner;
import java.util.Objects;
import java.util.Map;
import java.util.HashMap;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonTypeName;
import com.fasterxml.jackson.annotation.JsonValue;
import java.util.Arrays;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import javax.validation.constraints.*;
import javax.validation.Valid;
/**
* Request
*/
@JsonPropertyOrder({
Request.JSON_PROPERTY_TOKEN
})
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "2024-04-23T12:47:19.320030+02:00[Europe/Madrid]", comments = "Generator version: 7.5.0")
public class Request {
public static final String JSON_PROPERTY_TOKEN = "token";
private String token;
public Request() {
}
public Request token(String token) {
this.token = token;
return this;
}
/**
* Get token
* @return token
**/
@javax.annotation.Nonnull
@NotNull
@JsonProperty(JSON_PROPERTY_TOKEN)
@JsonInclude(value = JsonInclude.Include.ALWAYS)
public String getToken() {
return token;
}
@JsonProperty(JSON_PROPERTY_TOKEN)
@JsonInclude(value = JsonInclude.Include.ALWAYS)
public void setToken(String token) {
this.token = token;
}
}
如您所见,生成的类使用
@javax.annotation.Nonnull
,这是一个非标准类,必须使用非标准依赖项引入,例如:
<dependency>
<groupId>com.google.code.findbugs</groupId>
<artifactId>jsr305</artifactId>
<version>3.0.2</version>
</dependency>
理想情况下,类不应包含该注释或使用标准注释。
我的问题是:有没有办法删除这些注释或使用包含它们的标准库?
解决方案可以使用以下依赖项:
<dependency>
<groupId>io.swagger.parser.v3</groupId>
<artifactId>swagger-parser</artifactId>
<version>2.1.22</version>
</dependency>
但我认为仅仅两个注释就带来了很多垃圾