配置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
相关产品推荐
相关产品推荐

