赞
踩
注意使用的是fastjson
TestA这个类里面有一个字段,类型是一个枚举类EnumS,当使用JSON转String的时候,这个时候转出来的结果就是展示枚举的枚举名称
不要枚举名称,需要获取枚举中的内容,需要加上两种注解,分别为:
@JSONType(serializeEnumAsJavaBean = true)//加到枚举类上面
@JSONField(name = "枚举字段名")//加到枚举字段上面
完整版如下
import com.alibaba.fastjson.annotation.JSONField; import com.alibaba.fastjson.annotation.JSONType; /** * @Version 1.0 * @Author:xh * @Date:2024/4/11 * @Content: */ @JSONType(serializeEnumAsJavaBean = true) public enum EnumS { ONE(1, "one"), TWO(2, "two"); @JSONField(name = "value") private int value; @JSONField(name = "name") private String name; EnumS(int value, String name) { this.value = value; this.name = name; } public int getValue() { return value; } public void setValue(int value) { this.value = value; } public String getName() { return name; } public void setName(String name) { this.name = name; } // 根据 value 查找对应的枚举常量 public static EnumS findByValue(int value) { for (EnumS enumS : values()) { if (enumS.getValue() == value) { return enumS; } } return null; // 或者抛出异常 } }
此时的类转String已经是输出枚举内容
根据我们序列化出的String内容,构建实体类
需要一个根据枚举中内容获取枚举的方法(可以为两个参数,也可以一个参数,找到枚举即可)
/ 根据 value 查找对应的枚举常量
public static EnumS findByValue(int value) {
for (EnumS enumS : values()) {
if (enumS.getValue() == value) {
return enumS;
}
}
return null; // 或者抛出异常
}
需要构建一个类用于自定义解析枚举内容
参考:
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.parser.DefaultJSONParser; import com.alibaba.fastjson.parser.deserializer.ObjectDeserializer; import java.lang.reflect.Type; /** * @Version 1.0 * @Author:xh * @Date:2024/4/11 * @Content: */ public class EnumSDeserializer implements ObjectDeserializer { //返回结果修改为你自己的枚举类 @Override public EnumS deserialze(DefaultJSONParser parser, Type type, Object fieldName) { JSONObject jsonObject = parser.parseObject(); if (jsonObject != null) { int value = jsonObject.getIntValue("value"); int 枚举字段名 = jsonObject.getIntValue("枚举字段名"); // 使用 findByValue 方法查找枚举常量 return EnumS.findByValue(枚举字段名); } return null; } @Override public int getFastMatchToken() { return 0; } }
实体类里面的枚举字段也需要加一个注解
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;
/**
* @Version 1.0
* @Author:xh
* @Date:2024/4/11
* @Content:
*/
@Data
public class TestA {
@JSONField(deserializeUsing = EnumSDeserializer.class)//这个类名是你的自定义解析枚举内容的类
public EnumS enumS;
}
执行结果
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。