Java中枚举类-几个小枚举集合在一个接口类中

枚举类TestDict.java

public interface TestDict {
    @Getter
    @AllArgsConstructor
    @JsonFormat(shape = JsonFormat.Shape.OBJECT)
    enum TypeEnum implements IBaseEnum {
        TYPE_A(1, "type a - test"),
        TYPE_B(2, "type b - test"),
        ;
        private final Integer value;
        private final String label;
    }

    @Getter
    @AllArgsConstructor
    @JsonFormat(shape = JsonFormat.Shape.OBJECT)
    enum ConclusionEnum implements IBaseEnum {
        PASS(1, "正确"),
        FAIL(2, "错误");
        
        private final Integer value;
        private final String label;

    }
}

枚举类父级
@JsonSerialize(using = BaseEnumSerializer.class)
@JsonDeserialize(using = BaseEnumDeserializer.class)
public interface IBaseEnum {

    /**
     * 获取枚举值
     *
     * @return
     */
    Integer getValue();

    /**
     * 获取枚举文本
     *
     * @return
     */
    String getLabel();

    /**根据枚举值和type获取枚举*/
    static <T extends IBaseEnum> T getEnum(Class<T> type, int value) {
        T[] objs = type.getEnumConstants();
        for (T em : objs) {
            if (em.getValue().equals(value)) {
                return em;
            }
        }
        return null;
    }
}

响应参数转换枚举
public class BaseEnumSerializer extends JsonSerializer<IBaseEnum> {
    @Override
    public void serialize(IBaseEnum value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
        if (Objects.isNull(value)) {
            gen.writeNull();
            return;
        }
        gen.writeNumber(value.getValue());
    }
}

@NoArgsConstructor
public class BaseEnumDeserializer extends JsonDeserializer<IBaseEnum> implements ContextualDeserializer {

    private Class<? extends IBaseEnum> clazz;

    public BaseEnumDeserializer(Class<? extends IBaseEnum> clazz) {
        this.clazz = clazz;
    }

    @SneakyThrows
    @Override
    public IBaseEnum deserialize(JsonParser jsonParser, DeserializationContext ctxt) {
        final String param = jsonParser.getText();
        return Arrays.stream(clazz.getEnumConstants())
                .filter(x -> x.getValue().toString().equals(param))
                .findFirst()
                .orElse(null);
    }

    @SuppressWarnings({"unchecked"})
    @Override
    public JsonDeserializer<?> createContextual(DeserializationContext ctxt, BeanProperty property) throws JsonMappingException {
        JavaType type = property.getType();
        // 如果是容器,则返回容器内部枚举类型
        while (type.isContainerType()) {
            type = type.getContentType();
        }
        return new BaseEnumDeserializer((Class<? extends IBaseEnum>) type.getRawClass());
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值