我尝试在一个使用openapi3规范设计的API中引入可空属性,其思想是总是将属性返回给客户端,无论其值是否为空。
YAML文件(我尝试了第一次没有默认,与相同的结果):
property:
type: integer
nullable: true
default: null
生成的Java代码:
@JsonProperty("property")
private JsonNullable<Integer> property = JsonNullable.undefined();
API回复:
"property": {
"present": true
}
所以结果总是"存在":true ",无论属性是否为空。如果不为空,则效果很好,除了从不希望的响应中删除空值。
有什么想法吗?
另外,酒店的名字并不是"property"。
- 编辑:配置:**
<generateAliasAsModel>true</generateAliasAsModel>
<inputSpec>./api/interface1.yaml</inputSpec>
<generatorName>spring</generatorName>
<enablePostProcessFile>true</enablePostProcessFile>
<configOptions>
<sourceFolder>src/main/java</sourceFolder>
<library>spring-boot</library>
<java8>true</java8>
<interfaceOnly>true</interfaceOnly>
<useOptional>true</useOptional>
</configOptions>
2条答案
按热度按时间cbeh67ev1#
一个属性可以称为
nullable
,用于在openApi中传递空值。OpenApi生成器使用JsonNullable Package 数据类型,如下所示。你在问题中提到的回应说属性存在但不是真实的值,当对象没有被正确序列化时会发生这种情况,仅仅通过注册
JsonNullableModule
就应该指示如何序列化解析器,比如Jackson。至少在
org.openapitools:jackson-databind-nullable:0.2.1
版本中我没有看到这样的问题,这意味着不需要注册上面的显式,因为它是由库本身照顾。hfyxw5xn2#
感谢@maniganda-prakash的帮助,我能够通过在
RestTemplate
使用的自定义ObjectMapper
中注册模块来解决我的问题。大概是这样的