<span style="font-size:18px;">public class GsonUtils {
public static <T> T changeGsonToBean(String gsonString, Class<T> cls) {
Gson gson = new Gson();
T t = gson.fromJson(gsonString, cls);
return t;
}}</span>
<span style="font-size:18px;">public class Test {
public static void main(String[] args) {
String str = "{\"focus\":\"1\", \"name\":\"zhangsan\"}";
Person person = GsonUtils.changeGsonToBean(str, Person.class);
System.out.println(person.focus);
}
}</span>
打印出来一直是false。
正确的做法:
<span style="font-size:18px;">public class Test {
public static void main(String[] args) {
String str = "{\"focus\":true, \"name\":\"zhangsan\"}";
Person person = GsonUtils.changeGsonToBean(str, Person.class);
System.out.println(person.focus);
}
}</span>
Start by getting Gson 2.2.2 or later. Earlier versions (including 2.2) don't support type adapters for primitive types. Next, write a type adapter that converts integers to booleans:
privatestaticfinalTypeAdapter<Boolean> booleanAsIntAdapter =newTypeAdapter<Boolean>(){@Overridepublicvoid write(JsonWriter out,Boolean value)throwsIOException{if(value ==null){
out.nullValue();}else{
out.value(value);}}@OverridepublicBoolean read(JsonReader in)throwsIOException{JsonToken peek = in.peek();switch(peek){case BOOLEAN:return in.nextBoolean();case NULL:
in.nextNull();returnnull;case NUMBER:return in.nextInt()!=0;case STRING:returnBoolean.parseBoolean(in.nextString());default:thrownewIllegalStateException("Expected BOOLEAN or NUMBER but was "+ peek);}}};
... and then use this code to create the Gson instance: