|
@@ -1,10 +1,15 @@
|
|
|
package com.yonge.cooleshow.config;
|
|
|
|
|
|
import com.fasterxml.jackson.core.JsonGenerator;
|
|
|
+import com.fasterxml.jackson.core.JsonParser;
|
|
|
+import com.fasterxml.jackson.databind.BeanProperty;
|
|
|
+import com.fasterxml.jackson.databind.DeserializationContext;
|
|
|
import com.fasterxml.jackson.databind.DeserializationFeature;
|
|
|
+import com.fasterxml.jackson.databind.JsonDeserializer;
|
|
|
import com.fasterxml.jackson.databind.JsonSerializer;
|
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
import com.fasterxml.jackson.databind.SerializerProvider;
|
|
|
+import com.fasterxml.jackson.databind.deser.ContextualDeserializer;
|
|
|
import com.fasterxml.jackson.databind.module.SimpleModule;
|
|
|
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
|
|
|
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
|
|
@@ -13,12 +18,17 @@ import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer;
|
|
|
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
|
|
|
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
|
|
|
import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer;
|
|
|
+import com.yonge.cooleshow.common.config.EnumConverterFactory;
|
|
|
+import com.yonge.toolset.base.enums.BaseEnum;
|
|
|
+import lombok.Data;
|
|
|
+import lombok.EqualsAndHashCode;
|
|
|
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
|
|
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
|
|
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
|
|
|
import org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration;
|
|
|
import org.springframework.context.annotation.Bean;
|
|
|
import org.springframework.context.annotation.Configuration;
|
|
|
+import org.springframework.util.StringUtils;
|
|
|
|
|
|
import java.io.IOException;
|
|
|
import java.math.BigDecimal;
|
|
@@ -105,6 +115,10 @@ public class JacksonConfig {
|
|
|
.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(NORM_DATE_PATTERN)))
|
|
|
.addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(NORM_TIME_PATTERN)))
|
|
|
|
|
|
+ // 枚举类序列化
|
|
|
+ .addDeserializer(Enum.class, new BaseEnumDeserializer())
|
|
|
+ .addSerializer(BaseEnum.class, new BaseEnumSerializer())
|
|
|
+
|
|
|
// Long对象转String
|
|
|
//.addSerializer(Float.class, new FloatJsonSerializer())
|
|
|
//.addSerializer(Float.TYPE, new FloatJsonSerializer())
|
|
@@ -184,4 +198,59 @@ public class JacksonConfig {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 枚举类反序列化
|
|
|
+ */
|
|
|
+ @Data
|
|
|
+ @EqualsAndHashCode(callSuper = true)
|
|
|
+ public static class BaseEnumDeserializer extends JsonDeserializer<Enum<?>> implements ContextualDeserializer {
|
|
|
+
|
|
|
+ private Class<?> target;
|
|
|
+
|
|
|
+ @SuppressWarnings("all")
|
|
|
+ @Override
|
|
|
+ public Enum<?> deserialize(JsonParser jsonParser, DeserializationContext ctx) throws IOException {
|
|
|
+ if (!StringUtils.hasText(jsonParser.getText())) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (BaseEnum.class.isAssignableFrom(target)) {
|
|
|
+ return (Enum<?>) EnumConverterFactory.getEnum((Class) target, jsonParser.getText());
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param ctx DeserializationContext
|
|
|
+ * @param property BeanProperty
|
|
|
+ * @return JsonDeserializer
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public JsonDeserializer<?> createContextual(DeserializationContext ctx, BeanProperty property) {
|
|
|
+ Class<?> rawCls = ctx.getContextualType().getRawClass();
|
|
|
+ BaseEnumDeserializer enumDeserializer = new BaseEnumDeserializer();
|
|
|
+ enumDeserializer.setTarget(rawCls);
|
|
|
+ return enumDeserializer;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 枚举类序列化
|
|
|
+ */
|
|
|
+ public static class BaseEnumSerializer extends JsonSerializer<BaseEnum> {
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void serialize(BaseEnum enums, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
|
|
|
+
|
|
|
+ if (enums.getCode() instanceof Integer) {
|
|
|
+ // 返回整形
|
|
|
+ jsonGenerator.writeNumber(Integer.parseInt(String.valueOf(enums.getCode())));
|
|
|
+ } else {
|
|
|
+ // 返回字符串
|
|
|
+ jsonGenerator.writeString(String.valueOf(enums.getCode()));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|