java json与对象互转的坑

fastjson:
json反序列化的时候无法获得final域的值
jackson:
无法对接口反序列化,及不支持代理的pojo

共同问题
json序列化的时候map的key为对象是,将把对象序列化为一个损失命名信息的对象
及{"name":"wql","id":123}的对象将被序列化为{"wql",123}
解决方法:
给ObjectMapper注册能识别key的反序列化器(当然同时也要为你的 ObjectMapper注册一个专门序列化Map的序列化器
mapper = new ObjectMapper();
Collection<Bean<?>> allBeans = getAllBean();
SimpleModule module = new SimpleModule(_moduleName, new Version(0, 0, 0, null));
for(Bean<?> bean : allBeans){
Class beanClass = bean.getClass();
MyKeyDeserializer deserializer = new JaneKeyDeserializer(beanClass);
module.addKeyDeserializer(beanClass, deserializer);
}
mapper.registerModule(module);
class MyKeyDeserializer extends KeyDeserializer{
	
	static ObjectMapper mapper = new ObjectMapper();
	Class targetClass ; 
	
	
	
	public JaneKeyDeserializer(Class targetClass) {
		super();
		this.targetClass = targetClass;
	}



	@SuppressWarnings("unchecked")
	@Override
	public Object deserializeKey(String arg0, DeserializationContext arg1) throws IOException, JsonProcessingException {
		return mapper.readValue(arg0,targetClass);
	}
	
}
关于json规范

json的key必须要带双引号,如果没带必须对jackson进行设置
json序列化时,对象的getter和setter必须符合命名规范,如驼峰法什么的就不说了
如果变量名为sRid那么它的getter应该是getsRid而不是getSRid这是一大坑
同样变量名不能首字母大写!如不能是Rid!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值