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.
阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页