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

48 篇文章 1 订阅
44 篇文章 0 订阅

目标

记录 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()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值