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

配置Micronaut Serde序列化时始终包含所有属性(含空值)的方法

配置Micronaut Serde序列化时始终包含所有属性(含空值)的方法

我来帮你解决这个问题,要让Micronaut Serde的ObjectMapper在序列化时包含所有属性(包括null值),你可以通过全局配置或者局部注解两种方式实现,下面详细说明:

一、全局配置(对所有序列化生效)

如果你希望整个应用的序列化行为都保留null值,可以在配置文件中添加以下设置:

使用application.yml:

micronaut:
  serde:
    serialization:
      include: always

使用application.properties:

micronaut.serde.serialization.include=always

这个配置和你提到的Jackson中setSerializationInclusion(JsonInclude.Include.ALWAYS)效果完全一致,会让Micronaut Serde默认的ObjectMapper采用"始终包含所有属性"的序列化策略。

二、局部配置(仅针对特定类/字段)

如果只需要某个特定类在序列化时保留null值,可以在类上添加Jackson的@JsonInclude注解(Micronaut Serde兼容该注解):

@Introspected
@Serdeable
@JsonInclude(JsonInclude.Include.ALWAYS)
public record Name(String first, String last) {
}

这样只有Name类的实例在序列化时会包含null属性,其他类不受影响。

验证你的测试用例

完成上述配置后,你的测试代码就能得到预期结果:

@Test
void testObjectMapper() throws IOException {
    var name = new Name("My first", null);
    var expected = """
        {"first":"My first", "last": null}
        """;
    var json = ObjectMapper.getDefault().writeValueAsString(name);
    assertEquals(expected, json);
}

此时序列化后的JSON会完整包含last: null字段,而不是只输出非null的属性。

备注:内容来源于stack exchange,提问作者Frode Oldervoll

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 09:28:03