如何解决Swagger Schema - 模式不适用于字符串数组
所以我有一个 swagger 模式描述为:
MyStringArrayObject:
properties:
myStringArray:
type: array
minItems: 1
items:
type: string
pattern: ^\d+-.*-.+\d+$
maxLength: 100
required:
- myStringArray
我生成的类如下(我省略了构造函数、hashCode、equals 等):
@javax.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.JavaClientCodegen")
public class MyStringArrayObject implements Serializable{
@SerializedName("myStringArray")
private List<String> myStringArray = new ArrayList<>();
@NotNull
@Size(min=1) @Schema(required = true)
public List<String> getMyStringArray() {
return myStringArray;
}
public void setMyStringArray(List<String> myStringArray) {
this.myStringArray = myStringArray;
}
}
为什么不使用定义的 pattern
和 maxLength
验证数组(列表)项?插件没有这个功能吗?我错过了什么?
如果有帮助,这是我的插件配置:
<plugin>
<groupId>io.swagger.codegen.v3</groupId>
<artifactId>swagger-codegen-maven-plugin</artifactId>
<version>3.0.18</version>
<executions>
<execution>
<id>execution-swagger-models</id>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<language>java</language>
<library>okhttp-gson</library>
<output>${project.build.directory}/generated-sources/swagger</output>
<configOptions>
<serializableModel>true</serializableModel>
<dateLibrary>java8-localdatetime</dateLibrary>
<useBeanValidation>true</useBeanValidation>
<sourceFolder>.</sourceFolder>
</configOptions>
<generateApis>false</generateApis>
<generateModelDocumentation>false</generateModelDocumentation>
<generateModelTests>false</generateModelTests>
<generateSupportingFiles>false</generateSupportingFiles>
<environmentVariables>
<!-- generate all models -->
</environmentVariables>
<inputSpec>${project.basedir}/src/main/resources/myProject.yml</inputSpec>
<modelPackage>my.model</modelPackage>
</configuration>
</execution>
</executions>
</plugin>
提前致谢!
解决方法
我确实遇到过这个问题,希望这在 Swagger 和 OpenApi 生成器的未来版本中得到解决。
作为将其包装在另一个对象中的解决方法,languages
是我所指的那个。
Channel:
type: object
required:
- channelName
properties:
channelAccountId:
type: string
format: UUID
readOnly: true
languages:
type: array
items:
$ref: '#/components/schemas/Languages'
Languages:
properties:
language:
type: string
pattern: '[a-zA-Z]{2,3}([-\/][a-zA-Z]{2,3})?'
类生成如下。
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen",date = "2021-06-29T16:57:18.931915-07:00[America/Phoenix]")
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME,include = JsonTypeInfo.As.EXISTING_PROPERTY,property = "channelName",visible = true)
@JsonSubTypes({
@JsonSubTypes.Type(value = EMAIL.class,name = "email"),@JsonSubTypes.Type(value = RCS.class,name = "rcs"),})
public class Channel {
@JsonProperty("channelAccountId")
private UUID channelAccountId;
@JsonProperty("languages")
@Valid
private List<Languages> languages = null;
....
}
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen",date = "2021-06-29T16:57:18.931915-07:00[America/Phoenix]")
public class Languages {
@JsonProperty("language")
private String language;
public Languages language(String language) {
this.language = language;
return this;
}
@ApiModelProperty(value = "")
@Pattern(regexp="[a-zA-Z]{2,3}([-/][a-zA-Z]{2,3})?")
public String getLanguage() {
return language;
}
public void setLanguage(String language) {
this.language = language;
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。