java json与对象互转的坑

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

共同问题
json序列化的时候map的key为对象是,将把对象序列化为一个损失命名信息的对象
及{"name":"wql","id":123}的对象将被序列化为{"wql",123}
解决方法:
给ObjectMapper注册能识别key的反序列化器(当然同时也要为你的 ObjectMapper注册一个专门序列化Map的序列化器
mapper = new ObjectMapper();
Collection> 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!


你可能感兴趣的:(java)