SpringBoot返回枚举对象中的指定属性

枚举

package com.meeno.boot.oa.employee.enums;

import com.alibaba.fastjson.annotation.JSONType;
import com.meeno.boot.oa.common.BaseEnum;
import com.meeno.boot.oa.common.json.EnumSerializer;
import com.meeno.boot.oa.common.json.EnumDeserializer;

/**
 * @description: 员工状态枚举
 * @author: Wzq
 * @create: 2020-03-13 16:30
 */
@JSONType(serializer = EnumSerializer.class, deserializer = EnumDeserializer.class, serializeEnumAsJavaBean = true)
public enum EmployeeStatusEnum implements BaseEnum {
    ON_THE_JOB(1),//在职
    DIMISSION(2)//离职
    ;


    private Integer code;

    EmployeeStatusEnum(Integer code) {
        this.code = code;
    }

    @Override
    public Integer getCode() {
        return this.code;
    }
}

EnumDeserializer.java

package com.meeno.boot.oa.common.json;

import com.alibaba.fastjson.parser.DefaultJSONParser;
import com.alibaba.fastjson.parser.JSONLexer;
import com.alibaba.fastjson.parser.deserializer.ObjectDeserializer;
import com.meeno.boot.oa.common.BaseEnum;

import java.lang.reflect.Type;

public class EnumDeserializer implements ObjectDeserializer {
    @Override
    public <T> T deserialze(DefaultJSONParser parser, Type type, Object o) {
        final JSONLexer lexer = parser.lexer;
        Class cls = (Class) type;
        Object[] enumConstants = cls.getEnumConstants();
        if (BaseEnum.class.isAssignableFrom(cls)) {
            for (Object enumConstant : enumConstants) {
                BaseEnum baseEnum = (BaseEnum) enumConstant;
                if (lexer.intValue() == baseEnum.getCode()) {
                    return (T) baseEnum;
                }
            }
        }
        return null;

    }

    @Override
    public int getFastMatchToken() {
        return 0;
    }
}

EnumSerializer.java

package com.meeno.boot.oa.common.json;

import com.alibaba.fastjson.serializer.JSONSerializer;
import com.alibaba.fastjson.serializer.ObjectSerializer;
import com.meeno.boot.oa.common.BaseEnum;

import java.io.IOException;
import java.lang.reflect.Type;


public class EnumSerializer implements ObjectSerializer {

    @Override
    public void write(JSONSerializer jsonSerializer, Object o, Object o1, Type type, int i) throws IOException {
        if (o instanceof BaseEnum) {
            BaseEnum baseEnum = (BaseEnum) o;
            jsonSerializer.out.write(baseEnum.getCode().toString());
        } else {
            jsonSerializer.out.writeEnum((Enum<?>) o);
        }

    }
}
Spring Boot中,可以使用注解的方式将字典类型的字段替换成枚举类型的文字。假设我们有一个User实体类,其中有一个字段gender表示性别,取值为1或2,其中1表示男性,2表示女性。我们可以将其改为枚举类型,如下所示: ```java public enum Gender { MALE(1, "男"), FEMALE(2, "女"); private Integer value; private String text; Gender(Integer value, String text) { this.value = value; this.text = text; } public Integer getValue() { return value; } public String getText() { return text; } } ``` 然后在User类中使用该枚举类型: ```java public class User { private String name; private Gender gender; // ... // getter and setter methods } ``` 接下来,使用注解@JSONField来指定枚举类型与返回JSON数据中的字段的映射关系: ```java public class User { private String name; @JSONField(serializeUsing = EnumTextSerializer.class) private Gender gender; // ... // getter and setter methods } ``` 其中,@JSONField注解中的serializeUsing属性指定了一个自定义的EnumTextSerializer类,该类继承了com.alibaba.fastjson.serializer.EnumSerializer类,用于将枚举类型的值转为文字。 EnumTextSerializer类的代码如下所示: ```java public class EnumTextSerializer extends EnumSerializer { @Override public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType, int features) throws IOException { if (object == null) { serializer.getWriter().writeNull(); return; } Enum<?> e = (Enum<?>) object; String text = ((Gender) e).getText(); serializer.write(text); } } ``` 这样,当我们查询数据库时,返回JSON数据中,性别字段将会是"男"或"女",而不是1或2。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值