【 异常 】com.alibaba.fastjson.JSONException: set property error

目标

记录 FastJson 异常 com.alibaba.fastjson.JSONException: set property error, 及处理方法 。

异常还原

对象代码:

@Data
public class User implements Serializeable{
	private String firstName;
	private String lastName;
	
	public String getUserName(){
		if(StringUtils.isBlank(this.firstName) || StringUtils.isBlank(this.lastName)){
			return "";
		}
		return this.firstName + " " + this.lastName;
	}
}

业务代码:


public static void main(String[] args) {
		
		User user = new User();
		user.setFirstName("XZ");
		user.setLastName("BD");
		
		User userFromJson = JSON.toJavaObject((JSON) JSON.toJSON(user), User.class);
		System.out.println(userFromJson.getUserName());
		
	}

原因

根据异常信息:

com.alibaba.fastjson.JSONException: set property error,com.xzbd.jdemo.entry.User#userName

可知是对 User 中 userName 字段设置属性(set property error)时报错的了。而 User 对象并没有提供 userName 属性和 setUserName 方法,为什么会有这个错误提示呢?

原因自然是源代码提供了与 userName 相关的一个方法 getUserName 有关。目前怀疑 FastJSON 解析了 getXXX 方法,认为 User 对象提供了 userName 属性。这种解析方案在 java 中非常常见,但显然存在问题。真实情况需要进一步验证。

修复方案

修改代码 getUserName()userName()

你可能感兴趣的:(java技术,总结,笔记,java,servlet,开发语言)