关于枚举类在项目中的使用方法

前言

仅记录学习笔记,如有错误欢迎指正。

这段时间做新项目(Springboot+mybatisPlus),很多实体类的属性用的枚举,而我们的项目的枚举类型都是:
male(1,"男")
对应Enum.name(code,name),
项目需求:
保存时:<前台传code,我们需要用枚举类型去接受,然后保存code到数据库。
查询时:在查询出数据库的code时,需要映射到枚举中,然后返回枚举给前台(code+name)

解决方案

先从数据库返回数据用枚举接收来看:
@JsonFormat(shape = JsonFormat.Shape.OBJECT)
这个注解的作用是,当你从数据库已经读取到数据了,他会帮你返会一个枚举对象给前台!
由于数据库是根据Enum.name来映射保存到枚举对象的,而我们保存的是code到数据库,若是Ename和code一致,则没有问题,可以直接返回枚举对象,可若是不一致,则数据会无法映射到枚举上,这时可以自定义一个枚举接口IEnum(见代码)
定义一个获取枚举的方法,注意实现接口的时候这里需要return的是你数据保存的值!!这样的话,当数据返回的时候,会根据你数据库保存的值来映射队形的枚举对象,然后通过这个注解返回对象给前台!

再来看看前台传code,怎么用枚举来接受:
这个可以通过反射获取前台传过来的code值,然后根据code找到对应的枚举值,返回枚举对象。
这里推荐一个博客:传送
这个的反射方法亲测可行;后面只需要按照他说的在对应的枚举上加上@JsonDeserialize(using = JsonEnumDeserializer.class)就ok啦~

假如你们的前端在插入数据的时候传的不是code而是name,返回的数据也不需要枚举对应的code,只需要显示的name。
这里你可以用 @EnumValue 和 @JsonValue 这两个注解,它们可以使前台传来的name变为code插入到数据库,查询出的code变为name返回给前端!!
使用方式也很简单,在保存的数据的字段上加@EnumValue
在前端需要显示字段上加 @JsonValue
可以参考下面的TestEnum

代码

IEnum:
public interface IEnum <T extends Serializable>{
    /**
     * 枚举数据在数据库中的存储值
     */
    T getValue();
}

示例:
public enum TestEnum implements IEnum{
    male ("1","男"),
    ;
	@EnumValue
    private final  String code;
    @JsonValue
    private final  String name;
    TestEnum(String code,String name){
        this.code = code;
        this.name = name;
    }
    public String getCode(){
        return this.code;
    }
    public String getName(){
        return this.name;
    }
    @Override
    public Serializable getValue() {
        return this.code;
    }
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 使用lombok的时候,如果找不到枚的get方法,有以下几种可能的原因和解决办法: 1. 枚类的定义问题:首先要确认枚类是否正确定义了相应的get方法。Lombok通常会根据属性自动生成get方法,但是对于枚,由于其特殊性,可能需要手动定义get方法。 2. Lombok的版本问题:确定所使用的Lombok版本是否与项目的其他依赖或配置相兼容。有时候不同的Lombok版本在处理枚的方式上会有一些差异,因此确认版本是否一致或尝试更新Lombok版本可能有助于解决问题。 3. IDE的插件问题:检查IDE使用的Lombok插件是否已正确安装和启用。Lombok提供了对IDE的插件支持,以便在编译时生成getter和setter等方法。确保插件已正确安装并启用,以便正确生成get方法。 4. 编译问题:重新编译项目并确保没有编译错误。有时候编译错误或配置错误可能导致Lombok无法生成相应的get方法。重新编译项目可以解决这个问题。 如果上述方法都没有解决问题,建议在具体情况下进一步检查代码和相关配置,或寻求Lombok相关的文档、社区或支持渠道的帮助。 ### 回答2: 使用lombok时找不到枚的get方法可能是因为在枚使用了`@Getter`注解,而枚类的成员默认都是public static final类型,可以直接通过枚名称访问,无需通过get方法。 假如枚类代码如下: ``` @Getter public enum MyEnum { VALUE1, VALUE2, VALUE3; } ``` 在使用lombok的情况下,可以直接通过枚名称访问: ``` MyEnum myEnum = MyEnum.VALUE1; System.out.println(myEnum); ``` 此时就可以正确输出枚的值VALUE1了。 另外,如果在枚定义了成员变量,并且使用了`@Getter`注解,那么lombok会自动生成get方法。如以下代码: ``` @Getter public enum MyEnum { VALUE1("A"), VALUE2("B"), VALUE3("C"); private String code; MyEnum(String code) { this.code = code; } } ``` 在此情况下,就可以通过get方法获取枚的成员变量了: ``` MyEnum myEnum = MyEnum.VALUE1; System.out.println(myEnum.getCode()); ``` 上述代码将输出枚VALUE1的成员变量code的值"A"。所以,如果使用lombok找不到枚的get方法,可以先确保枚的成员是public static final类型,然后尝试直接通过枚名称来访问。如果枚定义了成员变量,可以使用get方法来获取成员变量的值。 ### 回答3: 使用Lombok时找不到枚的get方法可能是因为以下几个可能原因: 1. 枚未定义相应字段或get方法:Lombok会根据Java类的字段自动生成相应的getter和setter方法,如果枚未定义相应字段或get方法,可能会导致找不到相应的get方法。 2. Lombok的版本不兼容:不同版本的Lombok在生成getter和setter方法时可能有一些差异,如果使用的Lombok版本与IDE或编译器不兼容,可能会导致找不到枚的get方法。 3. IDE或编译器设置问题:有些IDE或编译器可能需要手动设置才能正确识别和生成Lombok的注解,如果没有正确设置,可能会导致找不到枚的get方法。 针对以上问题,可以尝试以下解决方法: 1. 确认枚定义了需要的字段或get方法,如果没有定义,可以手动添加相应的字段和get方法。 2. 更新Lombok的版本,确保Lombok的版本与IDE或编译器兼容。 3. 检查IDE或编译器的设置,确保已经正确配置Lombok的注解处理,例如在IDE可以确认是否安装了Lombok插件,并启用了注解处理功能。 4. 如果以上方法仍然不能解决问题,可以尝试使用传统的方式手动编写枚类的get方法,或者考虑使用其他的代码生成工具代替Lombok。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值