Gson的@SerializdName使用

将常量和对应的value整合为map,不想代码写得难看,一堆的for  equal?

for (entity e : list) {
    // 体积
    if("vol".equals(e.getCode())) {
        result.setVolume(e.getValue());
        continue;
    }
    // 重量
    if("weight".equals(e.code())) {
        resultVo.setWeight(e.getValue());
        continue;
    }
    // 数量
    if("num".equals(e.code())) {
        resultVo.setNum(e.getValue());
        continue;
    }
}

何不试试list转map,用Gson序列化map? 重点jdk8的list转map和Gson的@SerializedName

// 将list转为(code,value)键值对
Map<String, Object> map = list.stream().collect(Collectors.toMap(entity::getCode, entity::getValue));
// Gson序列化,将常量指定为类Bean里各属性@SerializedName的值
Bean result = gson.fromJson(gson.toJson(map),new TypeToken<Bean>() {}.getType());
Bean实体如下:
public class Bean {

    @SerializedName("vol")
    private Integer volume;

    @SerializedName("weight")
    private Integer weight;

    @SerializedName("num")
    private Integer num;


    public Integer getVolume() {
        return volume;
    }

    public void setVolume(Integer volume) {
        this.volume = volume;
    }

    public Integer getWeight() {
        return weight;
    }

    public void setWeight(Integer weight) {
        this.weight = weight;
    }

    public Integer getNum() {
        return num;
    }

    public void setNum(Integer num) {
        this.num = num;
    }
}

@SerializedName的功能和原理:

源码在com.google.gson.internal.bind.ReflectiveTypeAdapterFactory的方法getFieldNames,使用在

getBoundFields()里

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值