Java classes generated by the openapi-generator maven plugin exhibit a notable issue:
Non-standard annotations such as @javax.annotation.Nonnull
or @javax.annotation.Nullable
from com.google.code.findbugs:jsr305:3.0.2
are used.
Steps to reproduce:
- Write the OpenApi spec for your model
- Generate java class using
openapi-generator-maven-plugin
version 7.5.0
OpenAPI declaration file:
{
"openapi": "3.1.0",
"info": {
"title": "Sample contract",
"version": "1.0.0"
},
"paths": {},
"components": {
"schemas": {
"Request": {
"type": "object",
"required": ["token"],
"properties": {
"token": {
"type": "string"
}
}
}
}
}
}
Generated java class:
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;
}
}
As you can see, the generated class makes use of @javax.annotation.Nonnull
which is a non-standard class that must be brought using a non-standard dependency like:
<dependency>
<groupId>com.google.code.findbugs</groupId>
<artifactId>jsr305</artifactId>
<version>3.0.2</version>
</dependency>
Ideally, the class should not contain that annotation or use an standard one.
1