Gson将Json字符串转为javabean时boolean值转为int类型的处理方式

因为项目中有需求将返回的json中的boolean字段改为int类型的1或者0来处理适配问题。因此搜了一圈发现唯一的解决方法是写一个JsonTypeAdapter类注解方法来转换。

public class IntTypeAdapter extends TypeAdapter<Integer> {
    @Override
    public void write(JsonWriter out, Integer value) throws IOException {
        if (value == null) {
            out.nullValue();
        } else {
            out.value(value);
        }
    }

    @Override
    public Integer read(JsonReader in) throws IOException {
        JsonToken peek = in.peek();
        switch (peek) {
            case BOOLEAN:
                return in.nextBoolean()?1:0;//如果为true则返回为int的1,false返回0.
            case NULL:
                in.nextNull();
                return null;
            case NUMBER:
                return in.nextInt();
            case STRING:
                return toInteger(in.nextString());
            default:
                throw new JsonParseException("Expected BOOLEAN or NUMBER but was " + peek);
        }
    }

    /**
     * true  TURE 都为true
     * "0" 为 false
     * "1" 为 true
     * @param name
     * @return
     */
    public static int toInteger(String name) {
        if (TextUtils.isEmpty(name)){
            return 0;
        }else{
            if (name.equalsIgnoreCase("true")){
                return 1;
            }else if (name.equalsIgnoreCase("false")){
                return 0;
            }else if (name.equals("1")){
                return 1;
            }else if (name.equals("0")){
                return 0;
            }
        }
        return 0;
    }
}

那么在实体javabean中调用时直接如下图所示

public class ClientItemDT extends BaseDT{

    public String MAC;
    public String HostName;
    @JsonAdapter(IntTypeAdapter.class)
    public int ControlStatus;//true为正处于受控状态, false为未处于受控状态 1:true; 0:false
}
这样的话,即使后台返回的json中的ControlStatus字段为boolean类型的true,或者为String类型的“true”或“1”,都会被默认改为int类型的1.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值