mirror of
				https://github.com/continew-org/continew-starter.git
				synced 2025-10-26 19:00:53 +08:00 
			
		
		
		
	feat: 新增 Jackson 自动配置
This commit is contained in:
		| @@ -57,12 +57,5 @@ | |||||||
|             <groupId>cn.hutool</groupId> |             <groupId>cn.hutool</groupId> | ||||||
|             <artifactId>hutool-all</artifactId> |             <artifactId>hutool-all</artifactId> | ||||||
|         </dependency> |         </dependency> | ||||||
|  |  | ||||||
|         <!-- Lombok(在 Java 开发过程中用注解的方式,简化了 JavaBean 的编写,避免了冗余和样板式代码,让编写的类更加简洁) --> |  | ||||||
|         <dependency> |  | ||||||
|             <groupId>org.projectlombok</groupId> |  | ||||||
|             <artifactId>lombok</artifactId> |  | ||||||
|             <optional>true</optional> <!-- 表示依赖不会被传递 --> |  | ||||||
|         </dependency> |  | ||||||
|     </dependencies> |     </dependencies> | ||||||
| </project> | </project> | ||||||
| @@ -67,6 +67,13 @@ | |||||||
|                 <version>${hutool.version}</version> |                 <version>${hutool.version}</version> | ||||||
|             </dependency> |             </dependency> | ||||||
|  |  | ||||||
|  |             <!-- Jackson 模块 --> | ||||||
|  |             <dependency> | ||||||
|  |                 <groupId>top.charles7c.continew</groupId> | ||||||
|  |                 <artifactId>continew-starter-json-jackson</artifactId> | ||||||
|  |                 <version>${revision}</version> | ||||||
|  |             </dependency> | ||||||
|  |  | ||||||
|             <!-- 核心模块 --> |             <!-- 核心模块 --> | ||||||
|             <dependency> |             <dependency> | ||||||
|                 <groupId>top.charles7c.continew</groupId> |                 <groupId>top.charles7c.continew</groupId> | ||||||
|   | |||||||
							
								
								
									
										17
									
								
								continew-starter-json/continew-starter-json-jackson/pom.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								continew-starter-json/continew-starter-json-jackson/pom.xml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | |||||||
|  | <?xml version="1.0" encoding="UTF-8"?> | ||||||
|  | <project xmlns="http://maven.apache.org/POM/4.0.0" | ||||||
|  |          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||||||
|  |          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||||||
|  |     <modelVersion>4.0.0</modelVersion> | ||||||
|  |     <parent> | ||||||
|  |         <groupId>top.charles7c.continew</groupId> | ||||||
|  |         <artifactId>continew-starter-json</artifactId> | ||||||
|  |         <version>${revision}</version> | ||||||
|  |     </parent> | ||||||
|  |  | ||||||
|  |     <artifactId>continew-starter-json-jackson</artifactId> | ||||||
|  |     <packaging>jar</packaging> | ||||||
|  |  | ||||||
|  |     <name>${project.artifactId}</name> | ||||||
|  |     <description>ContiNew Starter JSON - Jackson 模块</description> | ||||||
|  | </project> | ||||||
| @@ -0,0 +1,78 @@ | |||||||
|  | /* | ||||||
|  |  * Copyright (c) 2022-present Charles7c Authors. All Rights Reserved. | ||||||
|  |  * <p> | ||||||
|  |  * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0; | ||||||
|  |  * you may not use this file except in compliance with the License. | ||||||
|  |  * You may obtain a copy of the License at | ||||||
|  |  * <p> | ||||||
|  |  * http://www.gnu.org/licenses/lgpl.html | ||||||
|  |  * <p> | ||||||
|  |  * Unless required by applicable law or agreed to in writing, software | ||||||
|  |  * distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  |  * See the License for the specific language governing permissions and | ||||||
|  |  * limitations under the License. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | package top.charles7c.continew.starter.json.jackson.autoconfigure; | ||||||
|  |  | ||||||
|  | import cn.hutool.core.date.DatePattern; | ||||||
|  | import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; | ||||||
|  | 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 lombok.extern.slf4j.Slf4j; | ||||||
|  | import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer; | ||||||
|  | import org.springframework.context.annotation.Bean; | ||||||
|  | import org.springframework.context.annotation.Configuration; | ||||||
|  | import top.charles7c.continew.starter.json.jackson.serializer.BigNumberSerializer; | ||||||
|  |  | ||||||
|  | import java.math.BigDecimal; | ||||||
|  | import java.math.BigInteger; | ||||||
|  | import java.time.LocalDate; | ||||||
|  | import java.time.LocalDateTime; | ||||||
|  | import java.time.LocalTime; | ||||||
|  | import java.time.format.DateTimeFormatter; | ||||||
|  | import java.util.TimeZone; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * Jackson 自动配置 | ||||||
|  |  * | ||||||
|  |  * @author Charles7c | ||||||
|  |  * @since 1.0.0 | ||||||
|  |  */ | ||||||
|  | @Slf4j | ||||||
|  | @Configuration(proxyBeanMethods = false) | ||||||
|  | public class JacksonAutoConfiguration { | ||||||
|  |  | ||||||
|  |     @Bean | ||||||
|  |     public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() { | ||||||
|  |         return builder -> { | ||||||
|  |             // 针对大数值的序列化处理 | ||||||
|  |             JavaTimeModule javaTimeModule = new JavaTimeModule(); | ||||||
|  |             javaTimeModule.addSerializer(Long.class, BigNumberSerializer.SERIALIZER_INSTANCE); | ||||||
|  |             javaTimeModule.addSerializer(Long.TYPE, BigNumberSerializer.SERIALIZER_INSTANCE); | ||||||
|  |             javaTimeModule.addSerializer(BigInteger.class, BigNumberSerializer.SERIALIZER_INSTANCE); | ||||||
|  |             javaTimeModule.addSerializer(BigDecimal.class, ToStringSerializer.instance); | ||||||
|  |             // 针对时间类型:LocalDateTime 的序列化和反序列化处理 | ||||||
|  |             DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN); | ||||||
|  |             javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(dateTimeFormatter)); | ||||||
|  |             javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(dateTimeFormatter)); | ||||||
|  |             // 针对时间类型:LocalDate 的序列化和反序列化处理 | ||||||
|  |             DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern(DatePattern.NORM_DATE_PATTERN); | ||||||
|  |             javaTimeModule.addSerializer(LocalDate.class, new LocalDateSerializer(dateFormatter)); | ||||||
|  |             javaTimeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer(dateFormatter)); | ||||||
|  |             // 针对时间类型:LocalTime 的序列化和反序列化处理 | ||||||
|  |             DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern(DatePattern.NORM_TIME_PATTERN); | ||||||
|  |             javaTimeModule.addSerializer(LocalTime.class, new LocalTimeSerializer(timeFormatter)); | ||||||
|  |             javaTimeModule.addDeserializer(LocalTime.class, new LocalTimeDeserializer(timeFormatter)); | ||||||
|  |             builder.timeZone(TimeZone.getDefault()); | ||||||
|  |             builder.modules(javaTimeModule); | ||||||
|  |             log.info("[ContiNew Starter] - Auto Configuration 'Jackson' completed initialization."); | ||||||
|  |         }; | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -0,0 +1,57 @@ | |||||||
|  | /* | ||||||
|  |  * Copyright (c) 2022-present Charles7c Authors. All Rights Reserved. | ||||||
|  |  * <p> | ||||||
|  |  * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0; | ||||||
|  |  * you may not use this file except in compliance with the License. | ||||||
|  |  * You may obtain a copy of the License at | ||||||
|  |  * <p> | ||||||
|  |  * http://www.gnu.org/licenses/lgpl.html | ||||||
|  |  * <p> | ||||||
|  |  * Unless required by applicable law or agreed to in writing, software | ||||||
|  |  * distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  |  * See the License for the specific language governing permissions and | ||||||
|  |  * limitations under the License. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | package top.charles7c.continew.starter.json.jackson.serializer; | ||||||
|  |  | ||||||
|  | import com.fasterxml.jackson.core.JsonGenerator; | ||||||
|  | import com.fasterxml.jackson.databind.SerializerProvider; | ||||||
|  | import com.fasterxml.jackson.databind.annotation.JacksonStdImpl; | ||||||
|  | import com.fasterxml.jackson.databind.ser.std.NumberSerializer; | ||||||
|  |  | ||||||
|  | import java.io.IOException; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 大数值序列化器 | ||||||
|  |  * <p> | ||||||
|  |  *     将 JS 取值范围之外的数值转换为字符串 | ||||||
|  |  * </p> | ||||||
|  |  * | ||||||
|  |  * @author Charles7c | ||||||
|  |  * @since 1.0.0 | ||||||
|  |  */ | ||||||
|  | @JacksonStdImpl | ||||||
|  | public class BigNumberSerializer extends NumberSerializer { | ||||||
|  |  | ||||||
|  |     /** 静态实例 */ | ||||||
|  |     public static final BigNumberSerializer SERIALIZER_INSTANCE = new BigNumberSerializer(Number.class); | ||||||
|  |     /** JS:Number.MAX_SAFE_INTEGER */ | ||||||
|  |     private static final long MAX_SAFE_INTEGER = 9007199254740991L; | ||||||
|  |     /** JS:Number.MIN_SAFE_INTEGER */ | ||||||
|  |     private static final long MIN_SAFE_INTEGER = -9007199254740991L; | ||||||
|  |  | ||||||
|  |     public BigNumberSerializer(Class<? extends Number> rawType) { | ||||||
|  |         super(rawType); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void serialize(Number value, JsonGenerator gen, SerializerProvider provider) throws IOException { | ||||||
|  |         if (value.longValue() > MIN_SAFE_INTEGER && value.longValue() < MAX_SAFE_INTEGER) { | ||||||
|  |             super.serialize(value, gen, provider); | ||||||
|  |         } else { | ||||||
|  |             gen.writeString(value.toString()); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -0,0 +1 @@ | |||||||
|  | top.charles7c.continew.starter.json.jackson.autoconfigure.JacksonAutoConfiguration | ||||||
							
								
								
									
										29
									
								
								continew-starter-json/pom.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								continew-starter-json/pom.xml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,29 @@ | |||||||
|  | <?xml version="1.0" encoding="UTF-8"?> | ||||||
|  | <project xmlns="http://maven.apache.org/POM/4.0.0" | ||||||
|  |          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||||||
|  |          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||||||
|  |     <modelVersion>4.0.0</modelVersion> | ||||||
|  |     <parent> | ||||||
|  |         <groupId>top.charles7c.continew</groupId> | ||||||
|  |         <artifactId>continew-starter</artifactId> | ||||||
|  |         <version>${revision}</version> | ||||||
|  |     </parent> | ||||||
|  |  | ||||||
|  |     <artifactId>continew-starter-json</artifactId> | ||||||
|  |     <packaging>pom</packaging> | ||||||
|  |  | ||||||
|  |     <name>${project.artifactId}</name> | ||||||
|  |     <description>ContiNew Starter JSON 模块</description> | ||||||
|  |  | ||||||
|  |     <modules> | ||||||
|  |         <module>continew-starter-json-jackson</module> | ||||||
|  |     </modules> | ||||||
|  |  | ||||||
|  |     <dependencies> | ||||||
|  |         <!-- 核心模块 --> | ||||||
|  |         <dependency> | ||||||
|  |             <groupId>top.charles7c.continew</groupId> | ||||||
|  |             <artifactId>continew-starter-core</artifactId> | ||||||
|  |         </dependency> | ||||||
|  |     </dependencies> | ||||||
|  | </project> | ||||||
							
								
								
									
										10
									
								
								pom.xml
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								pom.xml
									
									
									
									
									
								
							| @@ -69,8 +69,18 @@ | |||||||
|     <modules> |     <modules> | ||||||
|         <module>continew-starter-dependencies</module> |         <module>continew-starter-dependencies</module> | ||||||
|         <module>continew-starter-core</module> |         <module>continew-starter-core</module> | ||||||
|  |         <module>continew-starter-json</module> | ||||||
|     </modules> |     </modules> | ||||||
|  |  | ||||||
|  |     <dependencies> | ||||||
|  |         <!-- Lombok(在 Java 开发过程中用注解的方式,简化了 JavaBean 的编写,避免了冗余和样板式代码,让编写的类更加简洁) --> | ||||||
|  |         <dependency> | ||||||
|  |             <groupId>org.projectlombok</groupId> | ||||||
|  |             <artifactId>lombok</artifactId> | ||||||
|  |             <optional>true</optional> <!-- 表示依赖不会被传递 --> | ||||||
|  |         </dependency> | ||||||
|  |     </dependencies> | ||||||
|  |  | ||||||
|     <build> |     <build> | ||||||
|         <plugins> |         <plugins> | ||||||
|             <!-- 代码等格式化插件 --> |             <!-- 代码等格式化插件 --> | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user