Browse Source

:recycle: Refactoring code.optimize jackson java8 datetime module

萌萌哒SAKURA酱 6 years ago
parent
commit
427ec57d6a

+ 13 - 34
pigx-common/pigx-common-core/src/main/java/com/pig4cloud/pigx/common/core/config/JacksonConfig.java

@@ -1,31 +1,24 @@
 package com.pig4cloud.pigx.common.core.config;
 
 import cn.hutool.core.date.DatePattern;
-import com.fasterxml.jackson.databind.DeserializationFeature;
 import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.SerializationFeature;
-import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
-import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
-import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
-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.pig4cloud.pigx.common.core.jackson.PigxJavaTimeModule;
 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 java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.time.LocalTime;
-import java.time.format.DateTimeFormatter;
+import java.time.ZoneId;
+import java.util.Locale;
+import java.util.TimeZone;
 
 /**
  * JacksonConfig
  *
  * @author: lengleng
+ * @author L.cm
  * @author: lishangbu
  * @date: 2018/10/22
  */
@@ -33,27 +26,13 @@ import java.time.format.DateTimeFormatter;
 @ConditionalOnClass(ObjectMapper.class)
 @AutoConfigureBefore(JacksonAutoConfiguration.class)
 public class JacksonConfig {
-	/**
-	 * 针对JDK 1.8的日期时间格式特殊处理
-	 *
-	 * @return ObjectMapper
-	 */
 	@Bean
-	public ObjectMapper getObjectMapper() {
-		ObjectMapper objectMapper = new ObjectMapper();
-		JavaTimeModule javaTimeModule = new JavaTimeModule();
-		javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN)));
-		javaTimeModule.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATE_PATTERN)));
-		javaTimeModule.addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(DatePattern.NORM_TIME_PATTERN)));
-		javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN)));
-		javaTimeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATE_PATTERN)));
-		javaTimeModule.addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DatePattern.NORM_TIME_PATTERN)));
-		// javaTimeModule只能手动注册,参考https://github.com/FasterXML/jackson-modules-java8
-		objectMapper.registerModule(javaTimeModule);
-		// 忽略json字符串中不识别的属性
-		objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-		// 忽略无法转换的对象
-		objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
-		return objectMapper;
+	public Jackson2ObjectMapperBuilderCustomizer customizer() {
+		return builder -> {
+			builder.locale(Locale.CHINA);
+			builder.timeZone(TimeZone.getTimeZone(ZoneId.systemDefault()));
+			builder.simpleDateFormat(DatePattern.NORM_DATETIME_PATTERN);
+			builder.modules(new PigxJavaTimeModule());
+		};
 	}
 }

+ 35 - 0
pigx-common/pigx-common-core/src/main/java/com/pig4cloud/pigx/common/core/jackson/PigxJavaTimeModule.java

@@ -0,0 +1,35 @@
+package com.pig4cloud.pigx.common.core.jackson;
+
+import cn.hutool.core.date.DatePattern;
+import com.fasterxml.jackson.databind.module.SimpleModule;
+import com.fasterxml.jackson.datatype.jsr310.PackageVersion;
+import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
+import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
+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 java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.format.DateTimeFormatter;
+
+/**
+ * java 8 时间默认序列化
+ *
+ * @author L.cm
+ * @author lishanbu
+ */
+public class PigxJavaTimeModule extends SimpleModule {
+
+	public PigxJavaTimeModule() {
+		super(PackageVersion.VERSION);
+		this.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN)));
+		this.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATE_PATTERN)));
+		this.addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(DatePattern.NORM_TIME_PATTERN)));
+		this.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN)));
+		this.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATE_PATTERN)));
+		this.addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DatePattern.NORM_TIME_PATTERN)));
+	}
+}

+ 10 - 10
pigx-visual/pigx-codegen/src/main/java/com/pig4cloud/pigx/codegen/util/GenUtils.java

@@ -54,16 +54,16 @@ import java.util.zip.ZipOutputStream;
 @UtilityClass
 public class GenUtils {
 
-	private static final String ENTITY_JAVA_VM = "Entity.java.vm";
-	private static final String MAPPER_JAVA_VM = "Mapper.java.vm";
-	private static final String SERVICE_JAVA_VM = "Service.java.vm";
-	private static final String SERVICE_IMPL_JAVA_VM = "ServiceImpl.java.vm";
-	private static final String CONTROLLER_JAVA_VM = "Controller.java.vm";
-	private static final String MAPPER_XML_VM = "Mapper.xml.vm";
-	private static final String MENU_SQL_VM = "menu.sql.vm";
-	private static final String INDEX_VUE_VM = "index.vue.vm";
-	private static final String API_JS_VM = "api.js.vm";
-	private static final String CRUD_JS_VM = "crud.js.vm";
+	private final String ENTITY_JAVA_VM = "Entity.java.vm";
+	private final String MAPPER_JAVA_VM = "Mapper.java.vm";
+	private final String SERVICE_JAVA_VM = "Service.java.vm";
+	private final String SERVICE_IMPL_JAVA_VM = "ServiceImpl.java.vm";
+	private final String CONTROLLER_JAVA_VM = "Controller.java.vm";
+	private final String MAPPER_XML_VM = "Mapper.xml.vm";
+	private final String MENU_SQL_VM = "menu.sql.vm";
+	private final String INDEX_VUE_VM = "index.vue.vm";
+	private final String API_JS_VM = "api.js.vm";
+	private final String CRUD_JS_VM = "crud.js.vm";
 
 	private List<String> getTemplates() {
 		List<String> templates = new ArrayList<>();