牛骨文教育服务平台(让学习变的简单)
博文笔记

jsonObject Unknown property异常

创建时间:2017-01-20 投稿人: 浏览次数:1581

原址https://my.oschina.net/heweipo/blog/368116

java.lang.NoSuchMethodException: Unknown property XXXX

具体解决,如下代码:

public class JsonTest {
	
	@Test
	public void testJson2(){
		String json = "{"message":{"status":6000,"msg":"未知异常","success":"true"}}";
		JsonConfig config = new JsonConfig();
		config.setJavaPropertyFilter(new PropertyFilter(){

			public boolean apply(Object paramObject1, String paramString,
					Object paramObject2) {
				if(paramString.equals("status")||paramString.equals("msg")){
					return false;
				}
				return true;
			}});
		Message message = (Message)JSONObject.toBean(JSONObject.fromObject(JSONObject.fromObject(json).getString("message"),config),Message.class);
		
		System.out.println(message.getStatus());
	}
	
}

总结:

config配置项的作用就是过滤属性,出现这个Exception的原因有两点:

1)Json字符串属性过多,没有对应上javaBean的属性,所以程序会抛异常没有对应的属性。(使用gson不会出错)。

2)使用JsonConfig配置项过滤掉多余的属性。注意,是在字符串转为JSONObject的时候过滤。

3)JSONObject.toBean可以接收三个参数,这个接收三个参数的方法不要使用,会报错,而要使用接收两个参数的方法,另外,属性的过滤一定是在转为JSONObject的时候,而不是转Bean的时候。

4)JSONObject.fromObject(JSONObject.fromObject(result).getString("message"),config)  字符串转为JSONObject的时候过滤

5)(Message)JSONObject.toBean(JSONObject.fromObject(JSONObject.fromObject(result).getString("message"),config),Message.class);  不能使用(Message)JSONObject.toBean(JSONObject.fromObject(JSONObject.fromObject(result).getString("message"),config),Message.class,config);

否则又报错:

类转换异常

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。