fix(api): preserve null data in response envelopes

This commit is contained in:
2026-09-30 11:18:40 +08:00
parent e5832d5c67
commit c7945ad8fd
3 changed files with 47 additions and 1 deletions
@@ -0,0 +1,43 @@
package com.baiyue.common.web;
import com.baiyue.common.core.api.ApiResponse;
import com.baiyue.common.core.api.ResultCode;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.jupiter.api.Test;
import org.springframework.boot.autoconfigure.AutoConfigurations;
import org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration;
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
import java.util.Map;
import static org.assertj.core.api.Assertions.assertThat;
class ApiResponseSerializationTest {
@Test
void preservesEnvelopeDataUnderNonNullConfiguration() {
new ApplicationContextRunner()
.withConfiguration(AutoConfigurations.of(JacksonAutoConfiguration.class))
.withPropertyValues("spring.jackson.default-property-inclusion=non_null")
.run(context -> {
ObjectMapper mapper = context.getBean(ObjectMapper.class);
JsonNode success = mapper.readTree(mapper.writeValueAsString(ApiResponse.success(null)));
assertThat(success.path("code").asText()).isEqualTo("200");
assertThat(success.has("data")).isTrue();
assertThat(success.get("data").isNull()).isTrue();
assertThat(success.has("requestId")).isFalse();
JsonNode failure = mapper.readTree(mapper.writeValueAsString(
ApiResponse.failure(ResultCode.CONFLICT, "conflict", "request-1", "trace-1")));
assertThat(failure.path("code").asText()).isEqualTo("A0409");
assertThat(failure.has("data")).isTrue();
assertThat(failure.get("data").isNull()).isTrue();
assertThat(failure.path("requestId").asText()).isEqualTo("request-1");
assertThat(failure.path("traceId").asText()).isEqualTo("trace-1");
JsonNode populated = mapper.readTree(mapper.writeValueAsString(
ApiResponse.success(Map.of("status", "SUBMITTED"))));
assertThat(populated.path("data").path("status").asText()).isEqualTo("SUBMITTED");
});
}
}