1.首先网上有很多基于com.fasterxml.jackson的ObjectMapper的互转:
a.对象转换成String :
new ObjectMapper().writeValueAsString(Object);
b.String转换成复杂对象:
Bean bean = new ObjectMapper().readValue(beanString, Bean.class);
或者
List<String> list = new ObjectMapper().readValue(listString, new TypeReference<List<String>>(){});
2.但是因为数据库表实体类的中字段有外键关联其他实体类,反序列化readValue时会抛出异常:
JsonMappingException: Can not construct instance of : no int/Int-argument constructor/factory method to deserialize from Number value()
实体类字段中包含另一个实体类,这样会造成异常,网上很多方法都解决不了,所以换了阿里的fastjson服务
3.改用com.alibaba.fastjson的包:
a.对象转String:
JSONObject.toJSONString(Object)
b.String转换成复杂对象:
Bean bean = JSONObject.parseObject(beanString, Bean.class);
或者
Set<String> set = JSONObject.parseObject(setString, new TypeReference<Set<String>>(){});
4.正常转换,不再出现反序列化异常。
PS:附上一个别人的com.fasterxml.jackson的异常问题和解决方案总结: