remove gson

This commit is contained in:
Timi
2026-04-08 11:25:45 +08:00
parent b6a58b7376
commit 8947269351
53 changed files with 492 additions and 844 deletions
@@ -1,7 +1,12 @@
package com.imyeyu.api.config;
import com.google.gson.Gson;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.imyeyu.utils.Time;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.yaml.snakeyaml.Yaml;
/**
* @author 夜雨
@@ -10,7 +15,17 @@ import org.springframework.context.annotation.Configuration;
@Configuration
public class BeanConfig {
public Gson gson() {
return new Gson();
@Bean
public ObjectMapper jackson() {
ObjectMapper mapper = new ObjectMapper();
mapper.setDateFormat(Time.dateTime);
mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
return mapper;
}
@Bean
public Yaml yaml() {
return new Yaml();
}
}
@@ -6,6 +6,7 @@ import com.imyeyu.spring.bean.RedisConfigParams;
import com.imyeyu.spring.config.AbstractRedisConfig;
import com.imyeyu.spring.util.Redis;
import com.imyeyu.spring.util.RedisSerializers;
import io.lettuce.core.api.StatefulConnection;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
@@ -155,12 +156,13 @@ public class RedisConfig extends AbstractRedisConfig {
/** @return 连接池配置 */
@Bean
@Override
public GenericObjectPoolConfig<?> getPoolConfig() {
GenericObjectPoolConfig<?> config = new GenericObjectPoolConfig<>();
config.setMaxTotal(lettuce.pool.maxActive);
config.setMinIdle(lettuce.pool.minIdle);
config.setMaxIdle(lettuce.pool.maxIdle);
config.setMaxWait(Duration.ofMillis(lettuce.pool.maxWait));
public GenericObjectPoolConfig<StatefulConnection<?, ?>> getPoolConfig() {
RedisConfigParams configArgs = configParams();
GenericObjectPoolConfig<StatefulConnection<?, ?>> config = new GenericObjectPoolConfig<>();
config.setMaxTotal(8);
config.setMinIdle(configArgs.getMinIdle());
config.setMaxIdle(configArgs.getMaxIdle());
config.setMaxWait(Duration.ofMillis(-1));
return config;
}
@@ -224,7 +226,7 @@ public class RedisConfig extends AbstractRedisConfig {
/** @return 文章访问统计,文章 ID: {@link ArticleRanking}(JSON) */
@Bean("redisArticleRanking")
public Redis<Long, ArticleRanking> getArticleRankingRedisTemplate() {
return getRedis(database.articleRanking, RedisSerializers.LONG, RedisSerializers.gsonSerializer(ArticleRanking.class));
return getRedis(database.articleRanking, RedisSerializers.LONG, RedisSerializers.jacksonSerializer(ArticleRanking.class));
}
/** @return 文章访问记录,IP: [文章 ID] */
@@ -1,32 +1,28 @@
package com.imyeyu.api.config;
import com.google.gson.GsonBuilder;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.MapperFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.json.JsonMapper;
import com.imyeyu.api.annotation.EnableSettingInterceptor;
import com.imyeyu.api.annotation.RequestRateLimitInterceptor;
import com.imyeyu.api.annotation.RequiredTokenInterceptor;
import com.imyeyu.api.modules.common.entity.Attachment;
import com.imyeyu.api.modules.common.vo.user.UserProfileView;
import com.imyeyu.api.modules.common.vo.user.UserView;
import com.imyeyu.api.modules.journal.util.JournalAPIInterceptor;
import com.imyeyu.api.modules.minecraft.annotation.RequiredFMCServerTokenInterceptor;
import com.imyeyu.api.modules.minecraft.entity.MinecraftPlayer;
import com.imyeyu.api.modules.mirror.vo.MirrorView;
import com.imyeyu.api.modules.system.util.SystemAPIInterceptor;
import com.imyeyu.api.util.GsonSerializerAdapter;
import com.imyeyu.spring.annotation.RequestSingleParamResolver;
import jakarta.validation.constraints.NotNull;
import lombok.NonNull;
import com.imyeyu.spring.annotation.RequestBodyValueArgumentResolver;
import com.imyeyu.utils.Time;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.GsonHttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.io.Writer;
import java.lang.reflect.Type;
import java.nio.charset.StandardCharsets;
import java.util.List;
/**
@@ -40,12 +36,11 @@ import java.util.List;
@RequiredArgsConstructor
public class WebConfig implements WebMvcConfigurer {
private final ObjectMapper jackson;
private final SystemAPIInterceptor systemAPIInterceptor;
private final GsonSerializerAdapter gsonSerializerAdapter;
private final JournalAPIInterceptor journalAPIInterceptor;
private final RequiredTokenInterceptor requiredTokenInterceptor;
private final EnableSettingInterceptor enableSettingInterceptor;
private final RequestSingleParamResolver requestSingleParamResolver;
private final RequestRateLimitInterceptor requestRateLimitInterceptor;
private final RequiredFMCServerTokenInterceptor requiredFMCServerTokenInterceptor;
@@ -66,7 +61,7 @@ public class WebConfig implements WebMvcConfigurer {
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
argumentResolvers.add(requestSingleParamResolver);
argumentResolvers.add(new RequestBodyValueArgumentResolver(jackson));
}
/**
@@ -76,22 +71,17 @@ public class WebConfig implements WebMvcConfigurer {
*/
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
GsonHttpMessageConverter converter = new GsonHttpMessageConverter() {
@Override
protected void writeInternal(@NotNull Object object, Type type, @NonNull Writer writer) {
// 忽略参数类型,因为接口返回对象会被全局返回处理器包装为 TimiResponse,否则会序列化转型错误
getGson().toJson(object, writer);
}
};
GsonBuilder builder = new GsonBuilder();
builder.registerTypeAdapter(Attachment.class, gsonSerializerAdapter);
builder.registerTypeAdapter(UserView.class, gsonSerializerAdapter);
builder.registerTypeAdapter(MirrorView.class, gsonSerializerAdapter);
builder.registerTypeAdapter(UserProfileView.class, gsonSerializerAdapter);
builder.registerTypeAdapter(MinecraftPlayer.class, gsonSerializerAdapter);
converter.setGson(builder.create());
JsonMapper jsonMapper = JsonMapper.builder()
// 设置默认属性包含规则:忽略 null 值
.serializationInclusion(JsonInclude.Include.NON_NULL)
// 日期格式化
.defaultDateFormat(Time.dateTime)
// 忽略不存在字段
.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)
// 启用默认视图包含
.enable(MapperFeature.DEFAULT_VIEW_INCLUSION).build();
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(jsonMapper);
converter.setDefaultCharset(StandardCharsets.UTF_8);
converters.add(converter);
}
}