当前位置: 首页 > 知识库问答 >
问题:

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

刘承运
2023-03-14

我试图在使用openapi 3规范设计的API中引入可为null的属性。其思想是始终将属性返回给客户端,无论其值是否为null。

YAML文件(我先尝试了,没有默认,结果相同):

       property:
          type: integer
          nullable: true
          default: null

生成Java代码:

  @JsonProperty("property")
  private JsonNullable<Integer> property = JsonNullable.undefined();

API的响应:

  "property": {
    "present": true
  }

因此,无论属性是否为null,结果总是“present:true”。如果没有nullability,它就可以正常工作,除了从响应中删除不需要的null值。

有什么想法吗?

P、 该物业实际上并未命名为“物业”

编辑:配置:

<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个答案

阳光辉
2023-03-14

由于@maniganda prakash的帮助,我能够通过在自定义的对象映射器中注册模块来解决我的问题,该映射器由RestTemplate使用。

类似这样:

java prettyprint-override">var objectMapper = new ObjectMapper().registerModule(new JsonNullableModule());
var httpMessageConverter = new MappingJackson2HttpMessageConverter(objectMapper);
var restTemplate = RestTemplateBuilder.restTemplate().build();
restTemplate.getMessageConverters().add(0, httpMessageConverter);   
翟源
2023-03-14

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

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

您在问题中提到的回答是,属性存在,但不是真正的值,当对象未正确序列化时会发生这种情况。只需注册JsonNullableModule,就可以指导如何序列化jackson等解析器。

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

至少在版本<代码>组织中。openapitools:jackson-databind-nullable:0.2.1我没有看到这样的问题,这意味着不需要显式注册上述内容,因为它是由库本身负责的。

 类似资料:
  • 我目前正在使用openapi生成器maven插件生成一个模型,但当该模型创建BigDecimal属性时,它没有添加正确的导入。例如: 当我手动添加导入时,模型编译成功,但我认为它会生成。 我尝试在配置部分添加导入映射,如下所示: 正如这里所建议的那样。 还尝试了以下方法: 但行为是一样的。 我正在使用openapi生成器版本5.0.0。我目前的配置是这样的:

  • 我已经创建了我的。yml(减少): 我让生成Vertx的java类 类型为的属性按预期生成,但所有引用为的属性均按JsonNullable生成 我复制了生成的类并修复了泛型,以便映射器将值读取到预期的类。你知道怎么写这个吗。生成器创建的yml

  • 我在openapi v.3规范中有一个模型。我使用openapi生成器maven插件为库webclient(spring 5-webflux)生成java客户端。我想发送回客户端文件和http头。生成的代码没有获取响应标头的方法。 为客户端生成的代码不包含提供对响应头访问的代码。例如,如果我使用库resttemplate,则有一个方法public MultiValueMap getResponse

  • 不幸的是,SpringFox还不支持OpenAPI3,而且,当我只想将最初的yaml公开为JSON时,使用基于反射的生成器似乎毫无意义。

  • 我从一个openapi规范(3.0.1)设计开始,用openapi生成器maven-plugin(5.1.0)生成代码,然后我使用springdoc-openapi-ui进行Spring引导(2.5.4)。 我需要手动将生成的代码中的大部分注释从io.swagger.annotations.*迁移到io.swagger.v3.oas.annotations.*https://springdoc.o

  • 我只是将代码从swagger代码生成器迁移到open api代码生成器。我通过maven插件使用生成器。我需要它为一个外部API(在我的控制之外)生成一个客户端,这里给出了使用的swagger文件。 我的插件设置如下: 为了有一个最小的例子,我把昂首阔步的来源去掉了: 当生成器运行正常时,代码无效 结果列表«GenericRow»完全错误。 另一方面,类的名称是正确生成的只有变量名称处理错误。 如