|
@@ -0,0 +1,104 @@
|
|
|
+package com.persagy.apm.energyalarmstarter.alarmdata.feign;
|
|
|
+
|
|
|
+import com.alibaba.fastjson.PropertyNamingStrategy;
|
|
|
+import com.alibaba.fastjson.serializer.SerializeConfig;
|
|
|
+import com.alibaba.fastjson.serializer.SerializerFeature;
|
|
|
+import com.alibaba.fastjson.serializer.ValueFilter;
|
|
|
+import com.alibaba.fastjson.support.config.FastJsonConfig;
|
|
|
+import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
|
|
|
+import org.springframework.beans.factory.ObjectFactory;
|
|
|
+import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
|
|
|
+import org.springframework.cloud.openfeign.support.ResponseEntityDecoder;
|
|
|
+import org.springframework.cloud.openfeign.support.SpringDecoder;
|
|
|
+import org.springframework.cloud.openfeign.support.SpringEncoder;
|
|
|
+import org.springframework.context.annotation.Bean;
|
|
|
+import org.springframework.http.MediaType;
|
|
|
+import org.springframework.http.converter.HttpMessageConverter;
|
|
|
+
|
|
|
+import java.time.LocalDateTime;
|
|
|
+import java.time.ZoneOffset;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
+
|
|
|
+
|
|
|
+ * 数据中台feign配置类
|
|
|
+ * 在通过feign调用接口时,spring默认的编码器springEncoder会过滤掉参数中的空数组,而空数组参数在数据中台极为常见
|
|
|
+ * 因此feign调用中台接口使用fastjson进行参数的编码和解码。
|
|
|
+ *
|
|
|
+ * @author lixing
|
|
|
+ * @version V1.0 2021/11/12 2:53 下午
|
|
|
+ **/
|
|
|
+public class AlarmClientConfig {
|
|
|
+ @Bean
|
|
|
+ public ResponseEntityDecoder feignDecoder() {
|
|
|
+ HttpMessageConverter fastJsonConverter = createFastJsonConverter();
|
|
|
+ ObjectFactory<HttpMessageConverters> objectFactory = () -> new HttpMessageConverters(fastJsonConverter);
|
|
|
+ return new ResponseEntityDecoder(new SpringDecoder(objectFactory));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Bean
|
|
|
+ public SpringEncoder feignEncoder(){
|
|
|
+ HttpMessageConverter fastJsonConverter = createFastJsonConverter();
|
|
|
+ ObjectFactory<HttpMessageConverters> objectFactory = () -> new HttpMessageConverters(fastJsonConverter);
|
|
|
+ return new SpringEncoder(objectFactory);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * Description: 添加支持的类型
|
|
|
+ *
|
|
|
+ * @return List<MediaType>
|
|
|
+ * @author luoguangyi
|
|
|
+ * @since 2019年9月3日: 下午6:20:33 Update By luoguangyi 2019年9月3日: 下午6:20:33
|
|
|
+ */
|
|
|
+ private HttpMessageConverter createFastJsonConverter() {
|
|
|
+
|
|
|
+ FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
|
|
|
+ List<MediaType> supportedMediaTypes = new ArrayList<>();
|
|
|
+ supportedMediaTypes.add(MediaType.APPLICATION_JSON);
|
|
|
+ supportedMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
|
|
|
+ supportedMediaTypes.add(MediaType.APPLICATION_ATOM_XML);
|
|
|
+ supportedMediaTypes.add(MediaType.APPLICATION_FORM_URLENCODED);
|
|
|
+ supportedMediaTypes.add(MediaType.APPLICATION_OCTET_STREAM);
|
|
|
+ supportedMediaTypes.add(MediaType.APPLICATION_PDF);
|
|
|
+ supportedMediaTypes.add(MediaType.APPLICATION_RSS_XML);
|
|
|
+ supportedMediaTypes.add(MediaType.APPLICATION_XHTML_XML);
|
|
|
+ supportedMediaTypes.add(MediaType.APPLICATION_XML);
|
|
|
+ supportedMediaTypes.add(MediaType.IMAGE_GIF);
|
|
|
+ supportedMediaTypes.add(MediaType.IMAGE_JPEG);
|
|
|
+ supportedMediaTypes.add(MediaType.IMAGE_PNG);
|
|
|
+ supportedMediaTypes.add(MediaType.TEXT_EVENT_STREAM);
|
|
|
+ supportedMediaTypes.add(MediaType.TEXT_HTML);
|
|
|
+ supportedMediaTypes.add(MediaType.TEXT_MARKDOWN);
|
|
|
+ supportedMediaTypes.add(MediaType.TEXT_PLAIN);
|
|
|
+ supportedMediaTypes.add(MediaType.TEXT_XML);
|
|
|
+ fastConverter.setSupportedMediaTypes(supportedMediaTypes);
|
|
|
+
|
|
|
+
|
|
|
+ FastJsonConfig fastJsonConfig = new FastJsonConfig();
|
|
|
+
|
|
|
+ SerializeConfig serializeConfig = new SerializeConfig();
|
|
|
+ serializeConfig.propertyNamingStrategy = PropertyNamingStrategy.CamelCase;
|
|
|
+ fastJsonConfig.setSerializeConfig(serializeConfig);
|
|
|
+
|
|
|
+ fastJsonConfig.setSerializerFeatures(
|
|
|
+ SerializerFeature.PrettyFormat,
|
|
|
+ SerializerFeature.WriteDateUseDateFormat,
|
|
|
+
|
|
|
+ SerializerFeature.DisableCircularReferenceDetect
|
|
|
+ );
|
|
|
+
|
|
|
+ fastJsonConfig.setSerializeFilters((ValueFilter) (o, s, source) -> {
|
|
|
+ if (source == null) {
|
|
|
+ return "";
|
|
|
+ }
|
|
|
+ if (source instanceof LocalDateTime) {
|
|
|
+ return ((LocalDateTime) source).toInstant(ZoneOffset.of("+8")).toEpochMilli();
|
|
|
+ }
|
|
|
+ return source;
|
|
|
+ });
|
|
|
+
|
|
|
+ fastConverter.setFastJsonConfig(fastJsonConfig);
|
|
|
+
|
|
|
+ return fastConverter;
|
|
|
+ }
|
|
|
+}
|