有一个需求
一个controller需要接受一个参数这个参数是一个接口,因为有多种实现,并且这个接口的实现类中的某个字段是一个数组,里面的成员也是接口,有多种实现
即
A {
private List<B>
}
使用的是FastJsonHttpMessageConverter字段转换,
于是让前端传一个@type
这样解决了前端到后端的问题,能够正常反序列化
但是后端到数据库保存的时候 JSON.toJSONString(a,SerializerFeature.WriteClassName)
发现只有最外面有A对象的类型,而内部B类型没有写上@type
这样从数据库读取就会有问题
通过ParseProcess定制反序列化
看了文档的这部分,发现这只是对一些多余字段进行反序列化,比如如下的场景你在一个类中只写了一个getX方法,但是没有定义一个字段x,(fastjson是根据get set方法序列化的)这时候反序列化就会有一个字段x
ExtraProcessor就是让你给这种字段定义名称和类型的
使用serializeUsing制定属性的序列化类
使用了一个注解加在List<B>上,可以自定义序列化,加个类型,但是还需要自己把整个list里面的内容给序列化了。比较麻烦
ValueFilter使用这个比上面那个更麻烦,需要自己一层一层的解析,返回自己需要的value
因为他只遍历最外面的属性,让你决定每个value怎么写。
原文链接:https://www.f2er.com/json/288689.html