java Openapi生成器maven插件可空属性问题

flvlnr44  于 2023-02-02  发布在  Java
关注(0)|答案(2)|浏览(187)

我尝试在一个使用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>
cbeh67ev

cbeh67ev1#

一个属性可以称为nullable,用于在openApi中传递空值。OpenApi生成器使用JsonNullable Package 数据类型,如下所示。

private JsonNullable<String> firstField = JsonNullable.undefined();

你在问题中提到的回应说属性存在但不是真实的值,当对象没有被正确序列化时会发生这种情况,仅仅通过注册JsonNullableModule就应该指示如何序列化解析器,比如Jackson。

@Bean
public Module jsonNullableModule() {
   return new JsonNullableModule();
}

至少在org.openapitools:jackson-databind-nullable:0.2.1版本中我没有看到这样的问题,这意味着不需要注册上面的显式,因为它是由库本身照顾。

hfyxw5xn

hfyxw5xn2#

感谢@maniganda-prakash的帮助,我能够通过在RestTemplate使用的自定义ObjectMapper中注册模块来解决我的问题。
大概是这样的

var objectMapper = new ObjectMapper().registerModule(new JsonNullableModule());
var httpMessageConverter = new MappingJackson2HttpMessageConverter(objectMapper);
var restTemplate = RestTemplateBuilder.restTemplate().build();
restTemplate.getMessageConverters().add(0, httpMessageConverter);

相关问题