|
@@ -1,5 +1,13 @@
|
|
|
package com.qmth.boot.core.retrofit.core;
|
|
|
|
|
|
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
|
|
|
+import com.fasterxml.jackson.annotation.JsonInclude;
|
|
|
+import com.fasterxml.jackson.annotation.PropertyAccessor;
|
|
|
+import com.fasterxml.jackson.databind.DeserializationFeature;
|
|
|
+import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
+import com.fasterxml.jackson.databind.SerializationFeature;
|
|
|
+import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator;
|
|
|
+import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
|
|
|
import com.qmth.boot.core.retrofit.annotatioin.RetrofitClient;
|
|
|
import com.qmth.boot.core.retrofit.config.RetrofitProperties;
|
|
|
import com.qmth.boot.core.retrofit.interceptor.ErrorDecodeInterceptor;
|
|
@@ -29,8 +37,22 @@ public class RetrofitFactoryBean<T> implements FactoryBean<T>, ApplicationContex
|
|
|
|
|
|
private RetrofitProperties retrofitProperties;
|
|
|
|
|
|
+ private ObjectMapper mapper;
|
|
|
+
|
|
|
public RetrofitFactoryBean(Class<T> retrofitInterface) {
|
|
|
this.retrofitInterface = retrofitInterface;
|
|
|
+ // 初始化ObjectMapper
|
|
|
+ ObjectMapper mapper = new ObjectMapper();
|
|
|
+ // 反序列化时,允许有未知字段
|
|
|
+ mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
|
|
|
+ // 默认不序列化空值
|
|
|
+ mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
|
|
|
+ mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
|
|
|
+ mapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL);
|
|
|
+ // 解决jackson2无法反序列化LocalDateTime的问题
|
|
|
+ mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
|
|
|
+ mapper.registerModule(new JavaTimeModule());
|
|
|
+ this.mapper = mapper;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -60,7 +82,7 @@ public class RetrofitFactoryBean<T> implements FactoryBean<T>, ApplicationContex
|
|
|
OkHttpClient client = getOkHttpClient(retrofitClient, customize);
|
|
|
Retrofit.Builder retrofitBuilder = new Retrofit.Builder().baseUrl(getBaseUrl(retrofitClient, customize))
|
|
|
.addConverterFactory(ScalarsConverterFactory.create())
|
|
|
- .addConverterFactory(JacksonConverterFactory.create()).validateEagerly(true).client(client);
|
|
|
+ .addConverterFactory(JacksonConverterFactory.create(mapper)).validateEagerly(true).client(client);
|
|
|
if (retrofitClient.directReturn()) {
|
|
|
retrofitBuilder.addCallAdapterFactory(new DirectCallAdapterFactory());
|
|
|
}
|