SpringBoot中枚举类型的使用:①Json序列化和 ②在数据库中存储

ref:https://www.cnblogs.com/kelelipeng/p/13972138.html


前言

很多人给枚举定义一个私有的属性,序列化为JSON时,希望以这个属性值作为枚举对象的序列化结果。

但是如果对枚举类型不做任何处理的化,不管是FastJson 还是Jackson,默认的序列化结果都是 枚举名称。
如下:
OK(1,“ok_val”),
ERROR(2,“error_val”);
默认的序列化结果是将枚举名称 OK、ERROR 作为value。

同时,Jackson和FastJson是两种不同的Json序列化方案。因此,如果你给属性添加了Jackson的注解 @JsonValue ,但是在转化时,又使用的是FastJson的API去进行Json序列化,那么是没有效果的。

【注意】:Jackson的注解 @JsonValue ,不仅可以用在枚举类中 ,也可以用在普通的pojo类中,都可以将属性 作为对象的序列化value

1、想将Enum中的属性作为 Json序列化的value

json序列化时 希望将枚举对象中的一个属性作为序列化的结果 来响应给前端,这时候的处理方案是:

**方案一:使用Jackson的一个注解:@JsonValue **

只需要 在get方法上/ 属性上 添加 @JsonValue 即可。
【注意】:这个注解是jackson提供的的注解。@ResponseBody 默认使用的也是这种序列化方法。如果想使用FastJson的来处理的化,请移步: https://blog.csdn.net/csdn_0xFFFF/article/details/116675644

public enum StatusEnum {
    OK(1,"ok_val"),
    ERROR(2,"error_val"),
    WARN(3,"warn_val"),
    UNKNOWN(4,"unknown_val");
	
	// 位置1
	@JsonValue
    private String status;

    private Integer number;

    StatusEnum(Integer number,String status) {
        this.status = status;
        this.number = number;
    }

	// 位置2
    //@JsonValue
    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public Integer getNumber() {
        return number;
    }

    public void setNumber(Integer number) {
        this.number = number;
    }
}

2、想将Enum中的属性存储到 数据库中

可以使用MybatisPlus的注解: @EnumValue

3、使用举例

如下注解的意思就是:

  • 就是将type属性响应给前端;
  • 数据库中存储的也是Type属性。
    在这里插入图片描述

4、FastJson处理Enum对象 序列化问题

https://blog.csdn.net/csdn_0xFFFF/article/details/116675644

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值