fix(json/jackson): 修复 BaseEnum 反序列化数据类型仅支持数值的问题

This commit is contained in:
2024-11-16 21:29:09 +08:00
parent 232624aace
commit b11013ee80
3 changed files with 8 additions and 8 deletions

View File

@@ -16,6 +16,7 @@
package top.continew.starter.core.validation.constraints; package top.continew.starter.core.validation.constraints;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.core.text.CharSequenceUtil;
import jakarta.validation.ConstraintValidator; import jakarta.validation.ConstraintValidator;
import jakarta.validation.ConstraintValidatorContext; import jakarta.validation.ConstraintValidatorContext;
@@ -54,20 +55,20 @@ public class EnumValueValidator implements ConstraintValidator<EnumValue, Object
} }
// 优先校验 enumValues // 优先校验 enumValues
if (enumValues.length > 0) { if (enumValues.length > 0) {
return Arrays.asList(enumValues).contains(value.toString()); return Arrays.asList(enumValues).contains(Convert.toStr(value));
} }
Enum[] enumConstants = enumClass.getEnumConstants(); Enum[] enumConstants = enumClass.getEnumConstants();
if (enumConstants.length == 0) { if (enumConstants.length == 0) {
return false; return false;
} }
if (CharSequenceUtil.isBlank(enumMethod)) { if (CharSequenceUtil.isBlank(enumMethod)) {
return findEnumValue(enumConstants, Enum::toString, value.toString()); return findEnumValue(enumConstants, Enum::toString, Convert.toStr(value));
} }
try { try {
// 枚举类指定了方法名,则调用指定方法获取枚举值 // 枚举类指定了方法名,则调用指定方法获取枚举值
Method method = enumClass.getMethod(enumMethod); Method method = enumClass.getMethod(enumMethod);
for (Enum enumConstant : enumConstants) { for (Enum enumConstant : enumConstants) {
if (method.invoke(enumConstant).equals(value)) { if (Convert.toStr(method.invoke(enumConstant)).equals(Convert.toStr(value))) {
return true; return true;
} }
} }

View File

@@ -16,6 +16,7 @@
package top.continew.starter.json.jackson.serializer; package top.continew.starter.json.jackson.serializer;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.ClassUtil; import cn.hutool.core.util.ClassUtil;
import cn.hutool.core.util.ReflectUtil; import cn.hutool.core.util.ReflectUtil;
import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonParser;
@@ -26,6 +27,7 @@ import top.continew.starter.core.enums.BaseEnum;
import java.io.IOException; import java.io.IOException;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.util.Objects;
/** /**
* 枚举接口 BaseEnum 反序列化器 * 枚举接口 BaseEnum 反序列化器
@@ -66,7 +68,7 @@ public class BaseEnumDeserializer extends JsonDeserializer<BaseEnum> {
for (Object enumConstant : enumConstants) { for (Object enumConstant : enumConstants) {
if (ClassUtil.isAssignable(BaseEnum.class, fieldTypeClass)) { if (ClassUtil.isAssignable(BaseEnum.class, fieldTypeClass)) {
BaseEnum baseEnum = (BaseEnum)enumConstant; BaseEnum baseEnum = (BaseEnum)enumConstant;
if (baseEnum.getValue().equals(Integer.valueOf(value))) { if (Objects.equals(Convert.toStr(baseEnum.getValue()), Convert.toStr(value))) {
return baseEnum; return baseEnum;
} }
} }

View File

@@ -18,7 +18,6 @@ package top.continew.starter.web.autoconfigure.mvc;
import org.springframework.core.convert.converter.Converter; import org.springframework.core.convert.converter.Converter;
import top.continew.starter.core.enums.BaseEnum; import top.continew.starter.core.enums.BaseEnum;
import top.continew.starter.core.util.validate.ValidationUtils;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
@@ -42,8 +41,6 @@ public class BaseEnumConverter<T extends BaseEnum> implements Converter<String,
@Override @Override
public T convert(String source) { public T convert(String source) {
T t = enumMap.get(source); return enumMap.get(source);
ValidationUtils.throwIfNull(t, "枚举值非法:{}", source);
return t;
} }
} }