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": nullJsonNullable.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
相关产品推荐
相关产品推荐

