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"); }); } }