如何在PACT测试中处理null值字段被业务逻辑省略的问题
解决方案
你可以根据业务实际情况选择以下任意一种方案处理:
- 方案1:调整全局JSON序列化规则(适合所有契约要求字段必须返回的场景)
目前主流JSON序列化框架都支持保留null值字段的配置,对应常用框架配置如下:- Jackson(Spring/SpringBoot默认使用):
全局代码配置方式:
SpringBoot yml配置方式:objectMapper.setSerializationInclusion(JsonInclude.Include.ALWAYS); objectMapper.enable(SerializationFeature.WRITE_NULL_MAP_VALUES);spring: jackson: default-property-inclusion: always - Gson:
构造Gson实例时开启序列化null值配置:Gson gson = new GsonBuilder().serializeNulls().create(); - FastJSON:
序列化时添加对应特性:JSON.toJSONString(obj, SerializerFeature.WriteMapNullValue);
- Jackson(Spring/SpringBoot默认使用):
- 方案2:针对指定字段单独配置序列化规则(适合仅部分字段需要保留null值的场景)
不想改动全局序列化逻辑的话,可以在对应DTO的指定字段上加注解,强制该字段哪怕为null也返回。
以Jackson为例,在addressLine2字段上添加注解:
该配置仅对当前字段生效,其余字段还是会遵循原有逻辑自动过滤null值。@JsonInclude(JsonInclude.Include.ALWAYS) private String addressLine2; - 方案3:对齐双方需求调整PACT契约匹配规则(适合消费者实际不强制要求空值字段必须返回的场景)
如果确认消费者端在字段不存在时也可以正常处理,不需要强制返回null,可以修改契约中对应字段的匹配规则,将其设置为可选字段允许缺失。比如在定义响应体时使用PACT的optional匹配器包裹addressLine2字段,这样提供者返回时字段不存在也能通过契约校验。
内容的提问来源于stack exchange,提问作者LowCool
相关产品推荐
相关产品推荐

