You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot中如何处理OpenAPI生成的DTO的JsonNullable字段?

解决OpenAPI生成DTO中JsonNullable类型的赋值问题

直接解决赋值问题

给JsonNullable<Long>类型字段赋值时,需要用JsonNullable提供的静态方法把普通Long值包装起来:

  • 如果node.getParentId()不会为null,用JsonNullable.of()包装:
    response.setParentId(JsonNullable.of(node.getParentId()));
    
  • 如果node.getParentId()可能为null,用JsonNullable.ofNullable()包装(会把null转换成JsonNullable.nullable()状态):
    response.setParentId(JsonNullable.ofNullable(node.getParentId()));
    

理解JsonNullable的三种状态

OpenAPI生成的JsonNullable用来区分三种字段状态:

  • JsonNullable.undefined():字段未设置,序列化时不会输出该字段
  • JsonNullable.nullable():字段明确设置为null,序列化时输出"parentId": null
  • JsonNullable.of(T value):包装非null的有效值

可选:禁用JsonNullable生成

如果你的业务不需要区分“未设置”和“null”,可以修改OpenAPI Generator的配置,直接生成普通可空类型(比如Long):

以Maven插件为例,在pom.xml的生成器配置中添加<useNullable>false</useNullable>:

<plugin>
    <groupId>org.openapitools</groupId>
    <artifactId>openapi-generator-maven-plugin</artifactId>
    <version>你的具体版本</version>
    <executions>
        <execution>
            <goals>
                <goal>generate</goal>
            </goals>
            <configuration>
                <inputSpec>${project.basedir}/src/main/resources/openapi.yaml</inputSpec>
                <generatorName>spring</generatorName>
                <configOptions>
                    <useNullable>false</useNullable>
                    <!-- 适配Spring Boot版本,比如Spring Boot 3+需添加 -->
                    <springBoot3>true</springBoot3>
                </configOptions>
            </configuration>
        </execution>
    </executions>
</plugin>

注意:不要手动修改生成的DTO类,每次重新生成代码都会覆盖手动修改的内容,必须通过生成器配置调整。

内容的提问来源于stack exchange,提问作者JEINER ANDY JOSUE PINEDA CORLE

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.02 05:22:29