8
public class City implements Parcelable {
public final int code;
public final String name;
public final String pinyin;
@JSONCreator
public City(@JSONField(name = "code") int code,
@JSONField(name = "name") String name,
@JSONField(name = "pinyin") String pinyin) {
this.code = code;
this.name = name;
this.pinyin = pinyin;
}
}
@Test
public void testFullJSON() {
JSONObject data = new JSONObject();
data.put("name", "string");
data.put("code", 1);
data.put("pinyin", "pinyin");
City object = TypeUtils.castToJavaBean(data, City.class);
Assert.assertEquals("string", object.name);
Assert.assertEquals(1, object.code);
Assert.assertEquals("pinyin", object.pinyin);
}
@Test
public void testEmptyJSON() {
City object = TypeUtils.castToJavaBean(new JSONObject(), City.class);
Assert.assertEquals(null, object.name);
Assert.assertEquals(0, object.code);
}
在第二个测试用例中,由于json里面缺少City构造方法中的参数所对应的字段,导致报错:
Caused by: com.alibaba.fastjson.JSONException: default constructor not found. class com.parkingwang.api.service.city.objects.City
at com.alibaba.fastjson.util.JavaBeanInfo.build(JavaBeanInfo.java:213)
at com.alibaba.fastjson.parser.ParserConfig.createJavaBeanDeserializer(ParserConfig.java:522)
at com.alibaba.fastjson.parser.ParserConfig.getDeserializer(ParserConfig.java:457)
at com.alibaba.fastjson.parser.ParserConfig.getDeserializer(ParserConfig.java:312)
at com.alibaba.fastjson.util.TypeUtils.castToJavaBean(TypeUtils.java:911)
... 30 more
1.1.58.android / 1.2.33