java开发工具(9)fastJson注解是如何映射成指定出参格式的(源码解析)


在上篇博客java开发工具(8)中,我们说了使用 fastJson的注解进行出参映射的方式。那么这个映射方式如何实现的呢?下面我们就通过源码去看下

一、FastJsonHttpMessageConverter

我们在上一篇博文中定义了FastJsonHttpMessageConverter,这个类的关系图如下:
convert类关系图
最顶层的是HttpMessageConverter,有如下几个核心方法:

  • canRead
  • canWrite
  • read
  • write
    上面几个方法都是做一些判断,并没有真正的做序列化,真正的调用是在方法:writeInternal中。

二、JavaBeanSerializer

最后,所有的类型的输出都会走到JavaBeanSerializer类中,在这个类的write方法中,有这么一行代码:

fieldSerializer.writeValue(serializer, propertyValue);

这个方法就是输出序列化的,我们进入看下,里面有这个一段代码:

            ObjectSerializer fieldSerializer = null;
            JSONField fieldAnnotation = fieldInfo.getAnnotation();

            if (fieldAnnotation != null && fieldAnnotation.serializeUsing() != Void.class) {
                fieldSerializer = (ObjectSerializer) fieldAnnotation.serializeUsing().newInstance();
                serializeUsing = true;
            }

这段代码看到,我想你应该明了了,就是获取@JsonField的注解,然后反序列化的代码。
关于调用链,这里就没有必要写明了,你知道了开始进入的地方,也知道了,获取注解的地方,我想足够了。

三、总结

在这段调用中,扩展性最高的就是通过Spring的接口HttpMessageConverter的canRead,canWrite,read,write的四个方法去实践的,也充分体现了Spring的高扩展性。而这些高扩展性是通过哪些设计原则和设计模式实现的呢?是我们需要思考一下的

  • Spring通过基于接口编程的原则,让用户可以自定义HttpMessageConverter放到项目中
  • fastJson通过实现Spring定义的接口去扩展反序列化的方式。
发布了188 篇原创文章 · 获赞 117 · 访问量 38万+

猜你喜欢

转载自blog.csdn.net/lz710117239/article/details/105420830