mirror of
https://github.com/continew-org/continew-starter.git
synced 2025-09-09 08:57:17 +08:00
fix(json/jackson): 修复 BaseEnum 反序列化数据类型仅支持数值的问题
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user