java - Swagger Schema - 模式不适用于字符串数组
问题描述
所以我有一个招摇的模式描述为:
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;
}
}
推荐阅读
- java - 在 Java (apache poi) 中将文件另存为 CSV
- css - CSS给出错误:“样式规则的预期选择器”
- repast-simphony - Repast:从负刻度开始模拟
- c - FreeRTOS 中 strnlen 的隐式声明
- javascript - Javascript - 如何等待异步函数完成然后执行另一个函数?
- r - 在 R 中,如何构建一个包含一些引用列表中较早元素的元素的列表?
- ruby-on-rails - 如何遍历“application/ld+json”中的记录
- javascript - jsx问题在一行中显示电话号码
- python - Python中样本均值的置信区间(不同于手动)
- php - 将注册失败的错误日志插入到 PHP 中的表中