fix(api): preserve null data in response envelopes
This commit is contained in:
@@ -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");
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user