rename com.imyeyu.server to com.imyeyu.api
This commit is contained in:
59
src/main/java/com/imyeyu/api/util/GsonSerializerAdapter.java
Normal file
59
src/main/java/com/imyeyu/api/util/GsonSerializerAdapter.java
Normal file
@@ -0,0 +1,59 @@
|
||||
package com.imyeyu.api.util;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonSerializationContext;
|
||||
import com.google.gson.JsonSerializer;
|
||||
import com.imyeyu.java.TimiJava;
|
||||
import com.imyeyu.java.ref.Ref;
|
||||
import com.imyeyu.api.TimiServerAPI;
|
||||
import com.imyeyu.api.bean.MultilingualHandler;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.Type;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author 夜雨
|
||||
* @version 2023-10-26 10:16
|
||||
*/
|
||||
@Slf4j
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
public class GsonSerializerAdapter implements JsonSerializer<Object> {
|
||||
|
||||
private final Gson gson;
|
||||
private final RedisMultilingual redisMultilingual;
|
||||
|
||||
@Override
|
||||
public JsonElement serialize(Object value, Type typeOfSrc, JsonSerializationContext context) {
|
||||
if (value instanceof MultilingualHandler _value) {
|
||||
fillMultilingual(_value);
|
||||
}
|
||||
return gson.toJsonTree(value);
|
||||
}
|
||||
|
||||
private <K extends MultilingualHandler> void fillMultilingual(K value) {
|
||||
try {
|
||||
List<Field> fields = Ref.listFields(value.getClass());
|
||||
for (int i = 0; i < fields.size(); i++) {
|
||||
Field field = fields.get(i);
|
||||
MultilingualHandler.MultilingualField multiField = field.getAnnotation(MultilingualHandler.MultilingualField.class);
|
||||
if (multiField != null) {
|
||||
String multiLangId = Ref.getFieldValue(value, field, String.class);
|
||||
if (TimiJava.isNotEmpty(multiLangId)) {
|
||||
Long langId = Long.parseLong(multiLangId);
|
||||
if (redisMultilingual.map(TimiServerAPI.getUserLanguage()) instanceof RedisLanguage rl) {
|
||||
Ref.setFieldValue(value, field, rl.textArgs(langId, (Object) multiField.args()));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (IllegalAccessException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user