因为项目中有需求将返回的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.