diff --git a/spring-cloud-starter-tencent-polaris-contract/src/main/java/com/tencent/cloud/polaris/contract/PolarisContractReporter.java b/spring-cloud-starter-tencent-polaris-contract/src/main/java/com/tencent/cloud/polaris/contract/PolarisContractReporter.java index ff14e424b..10aebf678 100644 --- a/spring-cloud-starter-tencent-polaris-contract/src/main/java/com/tencent/cloud/polaris/contract/PolarisContractReporter.java +++ b/spring-cloud-starter-tencent-polaris-contract/src/main/java/com/tencent/cloud/polaris/contract/PolarisContractReporter.java @@ -23,6 +23,8 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.databind.ObjectMapper; import com.tencent.cloud.common.util.GzipUtil; import com.tencent.cloud.common.util.JacksonUtils; import com.tencent.cloud.polaris.PolarisDiscoveryProperties; @@ -39,6 +41,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springdoc.api.AbstractOpenApiResource; import org.springdoc.api.AbstractOpenApiResourceUtil; +import org.springdoc.core.providers.ObjectMapperProvider; import org.springdoc.webflux.api.OpenApiWebFluxUtil; import org.springdoc.webmvc.api.OpenApiWebMvcUtil; @@ -64,15 +67,18 @@ public class PolarisContractReporter implements ApplicationListener interfaceDescriptorList = getInterfaceDescriptorFromSwagger(openAPI); request.setInterfaceDescriptors(interfaceDescriptorList); - String jsonValue = JacksonUtils.serialize2Json(openAPI); + String jsonValue; + if (springdocObjectMapperProvider != null && springdocObjectMapperProvider.jsonMapper() != null) { + jsonValue = springdocObjectMapperProvider.jsonMapper().writeValueAsString(openAPI); + } + else { + ObjectMapper mapper = new ObjectMapper(); + mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); + jsonValue = mapper.writeValueAsString(openAPI); + } String serviceApiMeta = GzipUtil.compressBase64Encode(jsonValue, "utf-8"); request.setContent(serviceApiMeta); ReportServiceContractResponse response = providerAPI.reportServiceContract(request); diff --git a/spring-cloud-starter-tencent-polaris-contract/src/main/java/com/tencent/cloud/polaris/contract/config/PolarisSwaggerAutoConfiguration.java b/spring-cloud-starter-tencent-polaris-contract/src/main/java/com/tencent/cloud/polaris/contract/config/PolarisSwaggerAutoConfiguration.java index 0550b95b8..885c9ffd8 100644 --- a/spring-cloud-starter-tencent-polaris-contract/src/main/java/com/tencent/cloud/polaris/contract/config/PolarisSwaggerAutoConfiguration.java +++ b/spring-cloud-starter-tencent-polaris-contract/src/main/java/com/tencent/cloud/polaris/contract/config/PolarisSwaggerAutoConfiguration.java @@ -30,6 +30,7 @@ import io.swagger.v3.oas.models.info.Info; import io.swagger.v3.oas.models.info.License; import org.springdoc.core.configuration.SpringDocConfiguration; import org.springdoc.core.models.GroupedOpenApi; +import org.springdoc.core.providers.ObjectMapperProvider; import org.springdoc.webflux.api.MultipleOpenApiWebFluxResource; import org.springdoc.webmvc.api.MultipleOpenApiWebMvcResource; @@ -98,9 +99,9 @@ public class PolarisSwaggerAutoConfiguration { @Nullable MultipleOpenApiWebMvcResource multipleOpenApiWebMvcResource, @Nullable MultipleOpenApiWebFluxResource multipleOpenApiWebFluxResource, PolarisContractProperties polarisContractProperties, PolarisSDKContextManager polarisSDKContextManager, - PolarisDiscoveryProperties polarisDiscoveryProperties) { + PolarisDiscoveryProperties polarisDiscoveryProperties, ObjectMapperProvider springdocObjectMapperProvider) { return new PolarisContractReporter(multipleOpenApiWebMvcResource, multipleOpenApiWebFluxResource, - polarisContractProperties, polarisSDKContextManager.getProviderAPI(), polarisDiscoveryProperties); + polarisContractProperties, polarisSDKContextManager.getProviderAPI(), polarisDiscoveryProperties, springdocObjectMapperProvider); } @Bean